欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Shell中通配符的具體使用

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

1. 通配符(Wildcard)

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

find . -name "*.xml" 

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

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

2. 轉(zhuǎn)義字符

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

3. 例子

有時,我們需要對當前目錄中的所有文件進行操作,比如用 tar 命令將當前目錄下的所有文件打包,又如用 scp 命令將當前目錄下的所有文件傳輸?shù)搅硪慌_主機上。以 scp 的使用為例,我們可能會這么寫這個命令:

scp -r * username@hostname:path

但是,有的時候會發(fā)現(xiàn)一些奇怪的問題。比如說,我在本機開著 vim 編輯著一個文件,編輯完了之后 w 保存,然后用上面的命令把當前目錄下的文件傳到另一臺主機。如果你在另一臺主機上用 vim 打開這個文件,vim 會報錯,

Swap file ".filename.swp" already exists!

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

由于之前只保存了文檔而沒有退出,所以這個暫時性的 Swap file 還存在當前目錄中,隨著 scp 命令一起被傳送到了目標主機中。

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

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

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

4. 分清楚通配符表達式和正則表達式

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

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

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

今天使用 grep 時,就因為沒分清楚他們,忙活了半天。情況是這樣的,我想看一個 jar 包里是不是有 pom 相關的文件,所以就輸入了下面命令

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
...

這就是因為我把通配符表達式和正則表達式搞混了,后來知道原因后,用下面的命令才得到想要的內(nèi)容。

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

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

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

相關文章

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

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

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

    shell 腳本安裝PHP擴展的簡單方法

    下面小編就為大家?guī)硪黄猻hell 腳本安裝PHP擴展的簡單方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • linux Nginx 日志腳本

    linux Nginx 日志腳本

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

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

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

    Linux Shell腳本查看NUMA信息

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

    Shell腳本注釋寫法

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

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

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

    Linux 腳本編寫基礎知識

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

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

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

    基于shell的if和else詳解

    下面小編就為大家?guī)硪黄趕hell的if和else詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論