亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Shell中通配符的具體使用

 更新時(shí)間:2023年05月06日 16:38:33   作者:Happioo  
本文主要介紹了Shell中通配符的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1. 通配符(Wildcard)

在 Shell 中命令中,通常會(huì)使用通配符表達(dá)式來(lái)匹配一些文件,如以下命令可以查找當(dāng)前目錄下所有后綴為 .xml 的文件

find . -name "*.xml" 

Shell 中可以使用的通配符如下:

通配符含義實(shí)例
*匹配 0 或多個(gè)字符a*b,a與b之間可以有任意長(zhǎng)度的任意字符, 也可以一個(gè)也沒有, 如 aabcb, axyzb, a012b, ab
?匹配任意單個(gè)字符a?b,a與b之間有且只有一個(gè)字符, 可以是任意字符, 如 aab, abb, acb, a0b
[list]匹配 list 中的任意單個(gè)字符a[xyz]b,a與b之間必須也只能有一個(gè)字符, 但只能是 x 或 y 或 z, 如 axb, ayb, azb。
[!list]匹配除 list 中的任意單一字符a[!0-9]b,a與b之間必須也只能有一個(gè)字符, 但不能是阿拉伯?dāng)?shù)字, 如 axb, aab, a-b。
[c1-c2]匹配 c1-c2 中的任意單一字符a[0-9]b,匹配0與9之間其中一個(gè)字符,如 a0b, a1b... a9b
{s1,s2,...}匹配 s1 或 s2 (或更多)中的一個(gè)字符串a{abc,xyz,123}b,a與b之間只能是abc或xyz或123這三個(gè)字符串之一

2. 轉(zhuǎn)義字符

有的時(shí)候,我們匹配的內(nèi)容里面會(huì)存在 *?,[等通配符中的符號(hào)。為了表示他們?cè)瓉?lái)的意思,我們需要使用轉(zhuǎn)義字符 \,如 a\[ac\]c 表示匹配 a[a]ca[c]c。\ 本身用 \\ 表示。

3. 例子

有時(shí),我們需要對(duì)當(dāng)前目錄中的所有文件進(jìn)行操作,比如用 tar 命令將當(dāng)前目錄下的所有文件打包,又如用 scp 命令將當(dāng)前目錄下的所有文件傳輸?shù)搅硪慌_(tái)主機(jī)上。以 scp 的使用為例,我們可能會(huì)這么寫這個(gè)命令:

scp -r * username@hostname:path

但是,有的時(shí)候會(huì)發(fā)現(xiàn)一些奇怪的問題。比如說(shuō),我在本機(jī)開著 vim 編輯著一個(gè)文件,編輯完了之后 w 保存,然后用上面的命令把當(dāng)前目錄下的文件傳到另一臺(tái)主機(jī)。如果你在另一臺(tái)主機(jī)上用 vim 打開這個(gè)文件,vim 會(huì)報(bào)錯(cuò),

Swap file ".filename.swp" already exists!

這是因?yàn)?vim 在打開一個(gè)文件編輯時(shí),會(huì)產(chǎn)生一個(gè) Swap file,這個(gè) file 里面存的是編輯時(shí)對(duì)文檔產(chǎn)生的改變,當(dāng) Vim 崩潰了之類的問題發(fā)生時(shí),可以從這個(gè) Swap file 恢復(fù)。Swap file 會(huì)在退出該文檔時(shí)被移除。如果用戶試圖打開一個(gè)已存在 Swap file 的文檔時(shí),vim 就會(huì)報(bào)錯(cuò),防止多個(gè)用戶同時(shí)編輯同個(gè)文件的情況的發(fā)生。

由于之前只保存了文檔而沒有退出,所以這個(gè)暫時(shí)性的 Swap file 還存在當(dāng)前目錄中,隨著 scp 命令一起被傳送到了目標(biāo)主機(jī)中。

在我們的期望中,是不希望這個(gè)暫時(shí)性的文件被傳輸?shù)摹S捎?Swap file 的格式為 .filename.swp。我們可在開頭的 . 做文章,讓 scp 不傳輸以 . 開頭的文件。

 scp -r [!.]* username@hostname:path

. 開頭的文件一般為配置文件,緩存之類,通常都是不希望被傳輸?shù)摹#ㄓ袝r(shí)候傳輸了之后,發(fā)現(xiàn)有問題,但是 ls 了半天也沒找出問題,因?yàn)樗麄兡J(rèn)是隱藏的,用 ls -a 才能查看)。

4. 分清楚通配符表達(dá)式和正則表達(dá)式

通配符看起來(lái)和正則表達(dá)式很像,但他們并不是同一種東西。正則表達(dá)式中的那些量詞的匹配規(guī)則和這里提到的幾個(gè)通配符的匹配規(guī)則并不相同。如正則表達(dá)式中 * 表示重復(fù)前一個(gè)字符任意次, 而通配符表達(dá)式中 * 表示 0 或多個(gè)任意字符。在正則表達(dá)式中,ab* 表示的是那些 a 后面跟 0 個(gè)或多個(gè) b 的字符串,而通配符表達(dá)式中 ab* 表示的是那些 ab 后面跟任意個(gè)字符的字符串。

而且正則表達(dá)式一般是部分匹配的,用來(lái)匹配內(nèi)容中的一部分,如用正則表達(dá)式 a 去匹配 bac 這段字符串時(shí),匹配是成功的,匹配到的內(nèi)容是 a。但是通配符表達(dá)式的話是全部匹配的,表達(dá)式要匹配整個(gè)字符串才算匹配成功,如用通配符表達(dá)式 a 取匹配 bac 這段字符串時(shí),匹配是失敗的。

在 Shell 命令中,通常用通配符表達(dá)式來(lái)匹配文件名,而用正則表達(dá)式來(lái)匹配一段文本內(nèi)容。以 grep 命令為例,grep 命令可以在指定的文件中,挑選出和表達(dá)式匹配的那些行,其中指定文件是用的通配符表達(dá)式,而文本內(nèi)容的匹配用的是正則表達(dá)式。

今天使用 grep 時(shí),就因?yàn)闆]分清楚他們,忙活了半天。情況是這樣的,我想看一個(gè) jar 包里是不是有 pom 相關(guān)的文件,所以就輸入了下面命令

jar tf maven-model-builder-3.5.3.jar | grep 'pom*'

結(jié)果輸入了一堆文件,而且很多文件都沒有 pom 這串字符串的。輸出內(nèi)容是這樣的:

...
org/apache/maven/model/composition/
org/apache/maven/model/interpolation/
org/apache/maven/model/superpom/
org/apache/maven/model/composition/DependencyManagementImporter.class
...

這就是因?yàn)槲野淹ㄅ浞磉_(dá)式和正則表達(dá)式搞混了,后來(lái)知道原因后,用下面的命令才得到想要的內(nèi)容。

jar tf maven-model-builder-3.5.3.jar | grep 'pom.*'

使用 Shell 命令時(shí),要分清楚哪里用的是通配符表達(dá)式,哪里用的是正則表達(dá)式。

到此這篇關(guān)于Shell中通配符的具體使用的文章就介紹到這了,更多相關(guān)Shell 通配符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Shell腳本實(shí)現(xiàn)C語(yǔ)言代碼行數(shù)統(tǒng)計(jì)

    Shell腳本實(shí)現(xiàn)C語(yǔ)言代碼行數(shù)統(tǒng)計(jì)

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)C語(yǔ)言代碼行數(shù)統(tǒng)計(jì),本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-05-05
  • shell 腳本安裝PHP擴(kuò)展的簡(jiǎn)單方法

    shell 腳本安裝PHP擴(kuò)展的簡(jiǎn)單方法

    下面小編就為大家?guī)?lái)一篇shell 腳本安裝PHP擴(kuò)展的簡(jiǎn)單方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • linux Nginx 日志腳本

    linux Nginx 日志腳本

    這篇文章主要介紹了nginx日志切割腳本、nginx日志分析腳本等,需要的朋友可以參考下
    2013-11-11
  • Shell腳本實(shí)現(xiàn)IP地址合法性判斷

    Shell腳本實(shí)現(xiàn)IP地址合法性判斷

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)IP地址合法性判斷,本文給出了實(shí)現(xiàn)代碼和運(yùn)行代碼,需要的朋友可以參考下
    2014-10-10
  • Linux Shell腳本查看NUMA信息

    Linux Shell腳本查看NUMA信息

    這篇文章主要介紹了Linux Shell腳本查看NUMA信息,本文直接給出腳本實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-06-06
  • Shell腳本注釋寫法

    Shell腳本注釋寫法

    這篇文章主要介紹了Shell腳本注釋的3種寫法,包含單行注釋的方法和多行注釋的多種方法,需要的朋友可以參考下
    2014-07-07
  • Shell腳本之無(wú)限循環(huán)的兩種方法

    Shell腳本之無(wú)限循環(huán)的兩種方法

    這篇文章主要介紹了Shell腳本之無(wú)限循環(huán)的兩種方法,本文直接給出代碼實(shí)例,需要的朋友可以參考下
    2015-03-03
  • Linux 腳本編寫基礎(chǔ)知識(shí)

    Linux 腳本編寫基礎(chǔ)知識(shí)

    在學(xué)習(xí)shell 腳本之前,需要你了解很多關(guān)于shell的知識(shí),這些知識(shí)是編寫shell腳本的基礎(chǔ),所以希望你能夠熟練的掌握
    2013-05-05
  • Shell實(shí)現(xiàn)的iptables管理腳本分享

    Shell實(shí)現(xiàn)的iptables管理腳本分享

    這篇文章主要介紹了Shell實(shí)現(xiàn)的iptables管理腳本分享,本文腳本實(shí)現(xiàn)了添加、刪除、查看、停止、啟動(dòng)等,需要的朋友可以參考下
    2014-12-12
  • 基于shell的if和else詳解

    基于shell的if和else詳解

    下面小編就為大家?guī)?lái)一篇基于shell的if和else詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06

最新評(píng)論