1. 程式人生 > >shell裡的萬用字元和管道

shell裡的萬用字元和管道

複習;

硬連線必須是同一個磁碟分割槽內,不能跨裝置,而軟連線是可以的。

============================================================================================================

萬用字元

*代表通配任意多個字元

在aaa裡有多個目錄,一次全部刪除

[email protected]:~/aaa$ ls
a aa  aaaa  abcd asdf

那一個個的刪除,太麻煩了,就可以使用萬用字元進行刪除

[email protected]:~/aaa$ rmdir a*
[email protected]
:~/aaa$ ls [email protected]:~/aaa$

前提是都是空目錄!才能使用rmdir刪除,這樣我們就一下子全部刪除了,不用並列或者一個個的刪除。還有,比如只想刪除b結尾的

[email protected]:~/aaa$ ls
a1 a3  ab
[email protected]:~/aaa$ rmdir *b
[email protected]:~/aaa$ ls
a1 a3
[email protected]:~/aaa$
這樣就行了,不管什麼東西,只要是b結尾的,全部刪掉!而*是刪除所有,因為可以通配任何字元。

==========================================================================================================

補充一個ls的選項–d,意思是如果是一個目錄,那麼只看這個目錄本身的資訊,不去看他裡面的東西。

[email protected]:~/aaa$ ls -l
total 8
drwxrwxr-x 2 dashuai dashuai 4096 May 2120:17 a1
drwxrwxr-x 2 dashuai dashuai 4096 May 2120:17 a3
[email protected]:~/aaa$ ls -l -d
drwxrwxr-x 4 dashuai dashuai 4096 May 2120:18 .
這個樣子。沒有進入目錄aaa裡,而是直接看了aaa本身的詳細資訊。

===========================================================================================================

還有,比如以a打頭3結尾的目錄,全部刪掉

[email protected]:~/aaa$ ls
a1 a3  a32  afdf23 aggsx  ags
[email protected]:~/aaa$ rmdir a*3
[email protected]:~/aaa$ ls
a1 a32  aggsx  ags
[email protected]:~/aaa$
 
萬用字元 ? 代表任意的一個字元
[email protected]:~/aaa$ ls
a1 a32  aggsx  ags
[email protected]:~/aaa$ ls ???
a32:
 
ags:
[email protected]:~/aaa$
這樣只列出三個字元的,注意是字元,不一定必須是字母,但是隻能是代表任意一個,不能多不能少。
[email protected]:~/aaa$ ls
a1 a32  aggsx  ags
[email protected]:~/aaa$ ls -d a?
a1
[email protected]:~/aaa$

加–d 可以列出目錄,只列出a打頭,然後接一個字元的。就是a1

通配一個字符集或者一個範圍[ ],表示通配指定範圍內的一個字元

[email protected]:~/aaa$ touch a1 a2 a3 a4 a4aad af ag ah
[email protected]:~/aaa$ ls
a1 a2  a3  a4 a4a  ad  af ag  ah
[email protected]:~/aaa$

然後我們用[]萬用字元,只到a打頭,然後接著數字的,兩個字元的

[email protected]:~/aaa$ ls a[0-9]
a1 a2  a3  a4
[email protected]:~/aaa$

當然刪除也可以啊,新建什麼的

[email protected]:~/aaa$ rm a[0-2]
[email protected]:~/aaa$ ls
a3 a4  a4a  ad af  ag  ah
 
注意,也是通配一個字元。
[email protected]:~/aaa$ ls
a1 a2  a3  a4 a5  a6  a7
[email protected]:~/aaa$ echo a[1-12]
a1 a2
[email protected]:~/aaa$ echo a[9-12]
a2
[email protected]:~/aaa$
這樣寫,意思是

1-1,或者2

9-1 或者 2

有通配的就顯示出來。並且一定是隻匹配一個字元!!!!!!!!!!

注意:

這些萬用字元都是shell處理的,命令本身不處理這些萬用字元。在windows下,linux下,這些萬用字元都是常用的。

對於檢視檔案內容的命令,除了cat之外,還有很多,比如more,對於大檔案專用,比如cat 檢視passwd檔案

[email protected]:/$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing ListManager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System(admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
syslog:x:101:103::/home/syslog:/bin/false
messagebus:x:102:105::/var/run/dbus:/bin/false
avahi-autoipd:x:103:106:Avahi autoipdaemon,,,:/var/lib/avahi-autoipd:/bin/false
usbmux:x:104:46:usbmuxdaemon,,,:/home/usbmux:/bin/false
whoopsie:x:105:110::/nonexistent:/bin/false
kernoops:x:106:65534:Kernel Oops TrackingDaemon,,,:/:/bin/false
rtkit:x:107:114:RealtimeKit,,,:/proc:/bin/false
speech-dispatcher:x:108:29:SpeechDispatcher,,,:/var/run/speech-dispatcher:/bin/sh
colord:x:109:117:colord colour managementdaemon,,,:/var/lib/colord:/bin/false
lightdm:x:110:118:Light DisplayManager:/var/lib/lightdm:/bin/false
avahi:x:111:120:Avahi mDNSdaemon,,,:/var/run/avahi-daemon:/bin/false
hplip:x:112:7:HPLIP systemuser,,,:/var/run/hplip:/bin/false
pulse:x:113:121:PulseAudiodaemon,,,:/var/run/pulse:/bin/false
saned:x:114:123::/home/saned:/bin/false
dashuai:x:1000:1000:Ubuntu,,,:/home/dashuai:/bin/bash
[email protected]:/$
而more命令是分步檢視,對大檔案,會暫停的。按回車鍵往下走一行,按空格鍵往下走一螢幕。但是如果很長的檔案,那很麻煩,想退出,就按q,退出就行了。

注意:

[email protected]:/$ ls^C
[email protected]:/$
ctrl+c停止執行這個命令,任意鍵不能是這個鍵!!

還有less命令,也是分屏顯示檔案內容,但是more不能後退,而less可以進退自如,使用方向鍵隨意的檢視檔案的內容,翻看內容。

有的時候我們對檔案內容不感興趣,我們可以只看檔案的開頭,使用head命令,預設顯示前十行行,當然可以帶著選項數字,指定顯示多少行。

[email protected]:/$ head /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
[email protected]:/$

同理只想看後幾行,就用tail,尾巴的意思,也是10行,也可以加上選項數字。

[email protected]:/$ tail -2 /etc/passwd
saned:x:114:123::/home/saned:/bin/false
dashuai:x:1000:1000:Ubuntu,,,:/home/dashuai:/bin/bash
[email protected]:/$

統計檔案的內容,使用wc命令 word count,統計三個資料,行數,單詞數,字元數

[email protected]:/$ wc /etc/passwd
 34   56 1663 /etc/passwd
[email protected]:/$
只統計行數wc –l,-c只要字元數,-w只要單詞數
[email protected]:/$ wc -l /etc/passwd
34 /etc/passwd
[email protected]:/$

注意:

這個命令不是真正的去查詢單詞,而是以空格,換行為標準,比如一行東東,如果沒有空格,就預設是一個單詞了。顯然是單詞數統計不太準確了!但是行數很準確的。

可以查詢字串的命令,是grep命令,在一個檔案裡查詢包含指定的字串的行,並把字串所在行打印出來。

格式;grep 字串檔案

[email protected]:~$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
[email protected]:~$ grep Root /etc/passwd
[email protected]:~$ grep -i Root /etc/passwd
root:x:0:0:root:/root:/bin/bash
這裡使用i選項,可以忽略大小寫,ignore的意思。

查詢不包含某個關鍵字的行,使用反檢索reverse,grep –v 字串檔案。這樣查出來,東西很多,不好看,就可以使用重定向 > 命令到別的檔案,然後more或者less等命令去檢視。然後再rm刪除這個檔案即可。

[email protected]:~$ grep -v dashuai /etc/passwd> linshi.txt;more linshi.txt;rm linshi.txt
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
 
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing ListManager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System(admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
syslog:x:101:103::/home/syslog:/bin/false
messagebus:x:102:105::/var/run/dbus:/bin/false
avahi-autoipd:x:103:106:Avahi autoipdaemon,,,:/var/lib/avahi-autoipd:/bin/false
usbmux:x:104:46:usbmux daemon,,,:/home/usbmux:/bin/false
--More--(61%)
 

這樣的命令集合,用的很多,但是很麻煩,在unix/linux裡就有了管道

管道 | :將一個命令的輸出作為下一個命令的輸入,意思就是將左邊的命令輸出當作一個檔案,交給右邊的命令來處理。

[email protected]:~$ grep root /etc/passwd | wc
     1       1      32
是這個樣子
[email protected]:~$ grep dashuai /etc/passwd| wc -l
1
[email protected]:~$ gerp dashuai /etc/passwd
No command 'gerp' found, did you mean:
 Command 'grep' from package 'grep' (main)
gerp: command not found
[email protected]:~$ grep dashuai /etc/passwd
dashuai:x:1000:1000:Ubuntu,,,:/home/dashuai:/bin/bash
[email protected]:~$

相關推薦

shell字元管道

複習; 硬連線必須是同一個磁碟分割槽內,不能跨裝置,而軟連線是可以的。 ====================================================================================================

Linux學習之Shell基礎——Bash基本功能——字元其他特殊符號

1、萬用字元 萬用字元 作用 ? 匹配一個任意字元 * 匹配0個或任意多個任意字元,也就是可以匹配任何內容 [ ] 匹配中括號中任意一個字元。例如:[

shell '%'字元 '#' 字元的使用

% 萬用字元從右向左進行匹配,%%表示從右向左貪婪匹配。 說明: 1. {VAR%.* } 表示,從VAR中刪除位於 % 右側的萬用字元所匹配的字串,萬用字元從右向左進行匹配。 url=”www.jinlu.name” echo ${url%.*}

一步一步寫Makefile(2):shell命令,字元*%區別,檔案路徑搜尋vpath VPATH

#################6:Makefile中也可以插入shell命令################ variable=main.o test1.o test2.o main:$(variable)         cc -o main $(variable)

Linux中的字元正則表示式

在linux中,有萬用字元和正則表示式,這是兩個不同的概念 萬用字元:它是由shell解析,並且一般用於匹配檔名。如:ls 正則表示式:是一個字元匹配標準,可以匹配文字中的內容 一些命令工具按此標準實現字元匹配,常用於支援正則表示式的工具,如grep,sed等。一般用於匹配檔案中的內

Java泛型--上界字元下界字元

轉自:Java泛型中extends和super的區別? 另,問題來源:Java 泛型 <? super T> 中 super 怎麼 理解?與 extends 有何不同?   <? extends T>和<? super T>是Java泛型中的

redis的字元批量刪除Key

1. DEL 直接加鍵名稱 DEL key1 key2 key3 127.0.0.1:6379>  DEL site_msg_99973  false site_msg_99974   false site_msg_99979false 2. 批量刪除key

字元正則表示式聯絡區別

       以前總是把萬用字元和正則表示式的標誌搞混。最近沒用,又忘記做筆記了。看到一個同學的說說想起自己對於這塊也不熟悉。因此週末特意來補一篇部落格。為自己以後方便,也為大家早點福利。        以下基本出自百度百科,維基百科及網上資料。我負責收集一下。求不吐槽原創

makefile中使用字元換行符

介紹 makefile 規則的其它寫法,如在命令中使用萬用字元,和把命令與依賴寫在同一行,以及換行符的使用。看例子 test006,除了 makefile 檔案不一樣,test006 與 test005 的其它檔案是一樣的。 #執行方式:#make -f test006.m

Struts2字元它的各種坑

Struts2和Servlet相比有幾個牛逼的地方。對OGNL表示式的整合以及萬用字元的運用就是其中兩個。 而J2EE標準中,與這兩個對應的分別是JSP中EL表示式的運用,以及urlPattern中的萬用字元。 前面的一篇文章中,講述了OGNL的使用(OGN

Linux中字元正則表示式的區別

在看鳥哥的Linux私房菜的時候看到十二章一直強調萬用字元和正則表示式的區別,在我的理解中,兩者貌似是一樣的都是用來匹配的。Google之網上給出的答案是: 在文字過濾工具裡,都是用正則表示式,比如像awk,sed,等,是針對檔案的內容的 而萬用字元多用在檔名上,比如查詢

linux字元正則表示式

1、 萬用字元 萬用字元是shell在做PathnameExpansion時用到的。說白了一般只用於檔名匹配,它是由shell解析的,比如find,ls,cp,mv等。 1、1 Shell常見萬用字元: 萬用字元 含義 例項 * 匹配 0 或多個字元

生成線上https證書,支援字元多域名,初學Let’s Encrypt用於IIS,純本地手動

線上一直用的騰訊雲的免費證書(每個域名都要一個證書(滑稽),今天線上用的萬用字元證書也搞定了,實現了一個證書包含多個域名(多個泛域名)。 今年(2018)年初Let’s Encrypt已開放了萬用字元證書的申請《Wildcard Certi

字元正則表示式

萬用字元過濾 1.like操作符 2.百分號萬用字元(%) 在搜尋串中,%表示任何字元出現的任意次數。%不能匹配null,如like ‘jet%’表示以jet開頭的後面不管多少字元的匹配。 如果區分大小寫查詢,使用binary: select * from `t

Linux Shell字元與正則表示式

Overview wildcard是由shell處理的, 它只會出現在 command的argument 裡——既不用在 command_name裡, 也不用在 options 上。當在argument中碰到Wildcard時,shell會將其當作路徑或檔名去在磁碟上搜尋可能

Linux下的字元特殊符號用法詳解

在Linu系統中我們會遇到一些特殊符號 ,下面讓我給大家大致說一下 * 代表0個或者多個特殊字元 例子 yum.*

泛型--泛型字元泛型的上下限

##泛型 ####泛型概述   泛型:可以在類或者方法當中預支的使用未知的資料型別。 備註:一般在建立物件的時候,將未知的資料型別確定為具體的資料型別,當沒有指定泛型時,預設型別為Object型別。 ####使用泛型的好處   避免了型別轉換的麻煩,儲存的是什麼樣的資料型別,取出的就是什麼樣的資料型

shell介紹,命令歷史,命令補全別名,字元,輸入輸出重定向,管道作業控制

shell介紹 可以使用 yum list |grep zsh 或者 yum list |grep ksh 這樣可以搜尋 zs

Shell 學習(六、case...esac的使用字元)

#!/bin/bash echo "請輸入編號 選擇不同的顯示檔案和目錄方式:" echo "1 - 普通顯示" echo "2 - 詳細顯示" echo "3 - 顯示隱藏檔案" echo "4 - 退出" read num1 case $num1 in        

Java泛型方法型別字元的區別

泛型方法VS型別萬用字元(兩者可以混用):      1)你會發現所有能用型別萬用字元(?)解決的問題都能用泛型方法解決,並且泛型方法可以解決的更好: 最典型的一個例子就是: