成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux BASH Shell文件名匹配/輸出重定向

運(yùn)維 系統(tǒng)運(yùn)維
文件名匹配使得您不必一一寫出名稱,就可以指定多個(gè)文件。您將用到一些特殊的字符,稱為通配符(wildcards)。

文件名匹配/輸出重定向

文件名匹配
文件名匹配使得您不必一一寫出名稱,就可以指定多個(gè)文件。您將用到一些特殊的字符,稱為通配符(wildcards)。
假設(shè)您想用'rm'命令刪除目錄下所有以字符串'.bak'結(jié)尾的文件。除了在'rm'后跟上所有文件名作為參數(shù),您還可以用通配符'*':
rm *.bak
'*'可匹配一個(gè)或多個(gè)字符。在本例中, 您告訴 shell 將命令'rm'的參數(shù)擴(kuò)展到"所有以'*.bak'結(jié)尾的文件",shell 就將擴(kuò)展后的參數(shù)告訴'rm'命令。您將看到,shell 在命令執(zhí)行前,就將讀取并解釋命令行。正是因?yàn)檫@個(gè),您才可以將通配符用于 shell 命令的參數(shù)中。
讓我們更進(jìn)一步來認(rèn)識(shí)通配符'*'。假定您有個(gè)目錄,其中含文件'124.bak'、'346.bak'及'583.bak'。您想只保留文件'583.bak',可以用:
rm *4*.bak
shell 就將'*4*.bak'擴(kuò)展成"所有含'4'并以'.bak'結(jié)尾的字符串"。
注意到 rm 4*.bak 無法工作,因?yàn)檫@匹配的是以'4'開頭的文件。由于目錄中沒有這樣的文件,shell 將這個(gè)模式擴(kuò)展為空的字符串,故'rm'將返回出錯(cuò)信息:rm: cannot remove `4*.bak': No such file or directory
如果您想保留文件'346.bak',而刪除'124.bak'和'583.bak'。這看起來有些難度, 因?yàn)楸粍h文件的名稱除了后綴其他都不同。但幸運(yùn)的是,您可以用不含有來指定文件:rm *[!6].bak
這將被讀為:除了以'6.bak'結(jié)尾的文件,刪除其他所有以'.bak'結(jié)尾的文件。 您必須將取反號(hào)(negation sign)與取反字符(這里是 6)放到括號(hào)中,不然的話,shell 會(huì)將驚嘆號(hào)(exclamation mark)解釋成歷史記錄替換的開始(the beginning of a history substitution)。
取反號(hào)在本篇介紹的所有匹配模式中都有效。

請(qǐng)注意:通配符'*'與取反號(hào)連用,很容易產(chǎn)生問題。猜猜rm *[!6]*.bak表示什么?這個(gè)命令將刪除所有文件,甚至包括名稱中包含'6'的文件。如果您將通配符'*'放到了取反號(hào)前面和后面,實(shí)際上取反號(hào)將失效,因?yàn)?shell 將其解釋為"所有名稱中任何位置都不含該字符的文件"。在我們的例子里,只有文件'666.bak'不符合該模式。

第二個(gè)通配符是問號(hào)(question mark):'?'。在匹配時(shí),一個(gè)問號(hào)只能代表一個(gè)字符。為了示范其用途,我們?cè)谏侠募僭O(shè)中添加兩個(gè)新文件:'311.bak~'和'some.text'。現(xiàn)在, 列出所有在點(diǎn)號(hào)后有四個(gè)字符的文件:
ls *.????
問號(hào)通配符能夠有效地避免上面提到的'取反號(hào)陷阱'(negation trap):rm *[!4]?.*
將擴(kuò)展成"所有除了點(diǎn)號(hào)前倒數(shù)第二個(gè)字符為'4'的文件",也就是只保留文件'346.bak'。您可能會(huì)問,有沒有其他匹配方式?到目前為止,您只看到了在指定位置匹配唯一字符的方法。但其實(shí)您也可以這樣:
ls [13]*
將列出所有以字符'1'或'3'開頭的文件;在我們的例子中,文件'124.bak'、'311.bak~'和'346.bak'匹配。注意到您必須用中括號(hào)將匹配的模式括起來,否則模式只匹配以字符串'13'開頭的文件。接下來,您將高興地看到還可以定義匹配的范圍:
ls *[3-8]?.*
將列出所有點(diǎn)號(hào)前倒數(shù)第二個(gè)字符落在'3'到'8'范圍的文件。在我們的例子中,匹配的文件是'346.bak'和'583.bak'。

引用 shell 的特殊字符
但是,上面的那些機(jī)制存在一個(gè)缺點(diǎn):shell 總在命令執(zhí)行前,試著進(jìn)行擴(kuò)展。有時(shí)候,會(huì)變得很棘手:
文件名包含特殊字符。
假設(shè)您在那個(gè)目錄中還有一個(gè)名為'!56.bak'的文件。下面試圖進(jìn)行模式匹配:
rm !*
rm
rm: too few arguments
shell 將'!*'解釋成歷史記錄的替換(加入前一個(gè)命令的所有參數(shù)),而不是匹配方式。

命令本身帶特殊字符作參數(shù)。
一些 linux 下的命令行工具,比如 (e)grep、sed、awk、find 及 locate ,都使用自己的正則表達(dá)式(regular expressions)。這些表達(dá)式與模式匹配看起來驚人地相似, 但在某些地方又有所不同。但為了使這些特殊命令生效,shell 就不能先將其當(dāng)作模式匹配來解釋:
find . -name [1-9]* -print
find: paths must precede expression
應(yīng)該是:
find . -name '[1-9]*' -print
./346.bak
./124.bak
./583.bak
./311.bak~

您可以通過反斜線(back slash)來引用特殊字符,比如 ! 、$ 、? 或空格:
ls !*
!56.bak
或者用(單)引號(hào):
ls '!'*
!56.bak
請(qǐng)注意,要看清楚引號(hào)應(yīng)該放在什么位置。命令 ls '!*' 將查找名為'!*'的文件, 這是由于通配符也在引號(hào)間,所以只能依照字面來解釋。

輸出重定向
Unix 的理念是匯集許多小程序,每個(gè)東東都有特殊的專長。 復(fù)雜的任務(wù)不是由大型軟件完成,而是運(yùn)用 shell 的機(jī)制,組合許多小程序共同完成。重定向就在其中發(fā)揮著重要的作用。

在多個(gè)命令間重定向
這要通過管道(pipe),由管道符號(hào)|來標(biāo)識(shí)。語法是:command1 | command2 | command3 等等。這種格式您一定已經(jīng)見到過了。管道經(jīng)常將一個(gè)程序的輸出送到'more'或'less'來閱讀。
ls -l | less
其中,第一個(gè)命令提供目錄內(nèi)容,第二個(gè)則將其以翻頁的方式顯示。更復(fù)雜的例子如:rpm -qa | grep ^x | less
第一個(gè)命令給出所有已安裝的 RPM 包,第二個(gè)則將其過濾(filter:'grep'),只剩下以'^x'開頭的包,第三個(gè)命令則將結(jié)果以翻頁的方式顯示。

重定向至文件
有時(shí),您希望將命令的輸出結(jié)果保存到文件中,或以文件內(nèi)容作為命令的參數(shù)。這可以通過'>'和'<'來實(shí)現(xiàn)。
command > file將 command 的輸出保存到 file 中,這將覆蓋 file 中的內(nèi)容:
ls > dirlist
將當(dāng)前目錄的內(nèi)容保存到'dirlist'文件。
command < file
將 file 內(nèi)容作為 command 的輸入:
sort < dirlist > sdirlist
將文件'dirlist'的內(nèi)容送到命令'sort',然后再將排序后的結(jié)果送到文件'sdirlist'。當(dāng)然,您也可以一步到位:ls | sort > sdirlist
一種特殊的方式是'command 2> file'。這將 command 執(zhí)行的出錯(cuò)信息送到 file 中。這個(gè)您到時(shí)候會(huì)需要另一種操作符是'>>',這將輸出添加到已存在的文件中:
echo "string" >> file
將 string 加到文件 file 中。這是不打開文件而完成編輯的好辦法!
但是,'<'和'>'操作符都有一個(gè)重要的限制:command < file1 > file1將刪除 file1 的內(nèi)容,而command < file1 >> file1卻可以很好地工作,將加工過的 file1 內(nèi)容加回到文件中。
熟知了許多 shell 的機(jī)制后, 您可能急著想知道如何來定制環(huán)境。在后面的兩篇中,您將得到這方面的啟示。在最后一篇中,還有一段如何處理 shell 出錯(cuò)信息的常見問答(FAQ),及一些配置技巧。
 

【編輯推薦】

  1. Linux Bash命令關(guān)于程序調(diào)試詳解 
  2. Linux Bash命令關(guān)于快捷鍵應(yīng)用
  3. Linux Bash Shell系統(tǒng)的應(yīng)用詳解
  4. Linux Bash具體安裝步驟及使用介紹
  5. Linux Bash命令查詢相關(guān)事件詳解
責(zé)任編輯:chenqingxiang 來源: linux寶庫
相關(guān)推薦

2009-12-25 16:21:41

shell命令

2014-09-04 11:39:43

Linux

2020-12-09 11:10:12

shellLinux管道

2022-11-10 15:08:44

Linux輸入輸出

2009-12-25 16:53:25

Linux Bash命

2010-03-01 14:45:07

Linux文件重定向

2009-06-29 09:57:05

Unix

2020-07-27 07:41:23

Linux重定向數(shù)據(jù)流

2010-12-31 13:35:25

文件夾重定向

2020-02-24 11:37:56

Linux重定向管道

2010-12-14 15:07:15

ICMP路由重定向

2017-01-19 19:14:20

Linux重定向命令

2010-03-09 16:11:59

Linux重定向

2010-06-23 16:35:50

Linux Bash

2010-06-23 17:37:14

Linux Bash

2010-06-23 17:34:03

Linux Bash

2022-11-17 08:40:14

Linux輸出錯(cuò)誤重定向

2014-08-07 10:23:24

linux重定向

2020-11-05 14:28:07

Shell腳本SQL

2010-06-23 16:31:10

Linux Bash
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 中文字幕欧美一区二区 | 一区二区三区亚洲 | 日韩中出| 久久久久国产精品 | 国产成人综合在线 | 欧美性网站 | 久久国产精品无码网站 | 国产一区二区三区在线 | 亚洲精选久久 | 99av成人精品国语自产拍 | 特黄毛片 | 国产一区二区三区视频在线观看 | 欧美久久精品 | 国产在视频一区二区三区吞精 | 精精国产xxxx视频在线播放 | 一区二区在线 | 91精品国产欧美一区二区 | 亚洲欧美bt | 久久国产视频播放 | 日韩精品不卡 | 成人免费在线观看视频 | 91色综合| 久久亚洲欧美日韩精品专区 | 日韩av成人 | 欧美精品久久久 | 乳色吐息在线观看 | 欧美成年人视频在线观看 | 国产一级免费视频 | 综合成人在线 | 午夜视频在线观看一区二区 | 成人国产免费观看 | 亚洲精品区 | 91麻豆精品国产91久久久久久 | www.婷婷| 日韩电影免费在线观看中文字幕 | 亚洲电影免费 | 精品福利av导航 | 一区二区在线 | 欧美视频二区 | 成人av一区| 91视频大全 |