最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Shell中通配符的具體使用

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

1. 通配符(Wildcard)

在 Shell 中命令中,通常會(huì)使用通配符表達(dá)式來匹配一些文件,如以下命令可以查找當(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è)瓉淼囊馑?,我們需要使用轉(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)一些奇怪的問題。比如說,我在本機(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ù)?。由?Swap file 的格式為 .filename.swp。我們可在開頭的 . 做文章,讓 scp 不傳輸以 . 開頭的文件。

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

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

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

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

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

在 Shell 命令中,通常用通配符表達(dá)式來匹配文件名,而用正則表達(dá)式來匹配一段文本內(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á)式搞混了,后來知道原因后,用下面的命令才得到想要的內(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)文章

  • Git中需要熟記的命令小結(jié)

    Git中需要熟記的命令小結(jié)

    這篇文章總結(jié)了Git中必須記住的一些命令,,合理使用這些命令可以大大提升應(yīng)用Git的效率。有需要的可以參考學(xué)習(xí)。
    2016-08-08
  • Shell中set與shopt命令選項(xiàng)的含義和使用示例

    Shell中set與shopt命令選項(xiàng)的含義和使用示例

    這篇文章主要給大家介紹了關(guān)于Shell中set與shopt命令選項(xiàng)的含義與使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • Linux下Shell腳本中幾種基本命令的替換區(qū)別

    Linux下Shell腳本中幾種基本命令的替換區(qū)別

    最近因?yàn)楣ぷ餍枰?,需要編寫shell腳本。編寫大量shell腳本時(shí),累計(jì)了大量經(jīng)驗(yàn),也讓自己開始迷糊幾種函數(shù)輸出調(diào)用的區(qū)別。后面和前輩們請(qǐng)教了一下這個(gè)問題,大致明白了區(qū)別。這里分享給大家,希望對(duì)大家能有所收獲。下面來一起看看吧。
    2016-10-10
  • 詳解Linux中查看jdk安裝目錄、Linux卸載jdk、rpm命令、rm命令參數(shù)

    詳解Linux中查看jdk安裝目錄、Linux卸載jdk、rpm命令、rm命令參數(shù)

    這篇文章主要介紹了詳解Linux中查看jdk安裝目錄、Linux卸載jdk、rpm命令、rm命令參數(shù) 的相關(guān)資料,需要的朋友可以參考下
    2018-03-03
  • linux腳本實(shí)現(xiàn)自動(dòng)發(fā)送和收取郵件的設(shè)置方法

    linux腳本實(shí)現(xiàn)自動(dòng)發(fā)送和收取郵件的設(shè)置方法

    這篇文章主要是介紹linux下通過腳本自動(dòng)發(fā)送和收取郵件的設(shè)置方法,有需要的朋友可以參考下
    2013-05-05
  • shell周期差量備份文件夾的實(shí)現(xiàn)代碼

    shell周期差量備份文件夾的實(shí)現(xiàn)代碼

    這篇文章主要介紹了shell周期差量備份文件夾的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • shell 腳本自動(dòng)搭建nfs服務(wù)的方法示例

    shell 腳本自動(dòng)搭建nfs服務(wù)的方法示例

    這篇文章主要介紹了shell 腳本自動(dòng)搭建nfs服務(wù)的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 淺談Linux 腳本 sh 和 ./ 的區(qū)別

    淺談Linux 腳本 sh 和 ./ 的區(qū)別

    下面小編就為大家?guī)硪黄獪\談Linux 腳本 sh 和 ./ 的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • Linux shell腳本輸出日志筆記整理(必看篇)

    Linux shell腳本輸出日志筆記整理(必看篇)

    下面小編就為大家?guī)硪黄狶inux shell腳本輸出日志筆記整理(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • 關(guān)于Linux下動(dòng)態(tài)查看實(shí)時(shí)日志的命令

    關(guān)于Linux下動(dòng)態(tài)查看實(shí)時(shí)日志的命令

    這篇文章主要介紹了Linux下動(dòng)態(tài)查看實(shí)時(shí)日志的命令,在Linux中實(shí)時(shí)顯示文件內(nèi)容的常用命令是tail命令,tail命令是實(shí)時(shí)顯示日志文件的最常用解決方案,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09

最新評(píng)論

金塔县| 白朗县| 湄潭县| 东乡县| 桃园县| 乐安县| 区。| 东台市| 赤峰市| 固阳县| 永济市| 谢通门县| 武宣县| 汉源县| 江门市| 永兴县| 江都市| 宾川县| 昂仁县| 娄底市| 抚州市| 措美县| 孟州市| 都兰县| 慈利县| 乌兰察布市| 灵寿县| 古蔺县| 石首市| 白朗县| 汾西县| 苍溪县| 汉阴县| 丰城市| 贵定县| 七台河市| 阆中市| 西畴县| 扶余县| 柳江县| 呼图壁县|