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

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ù)?。由?Swap file 的格式為 .filename.swp。我們可在開頭的 . 做文章,讓 scp 不傳輸以 . 開頭的文件。

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

. 開頭的文件一般為配置文件,緩存之類,通常都是不希望被傳輸?shù)摹#ㄓ袝r候傳輸了之后,發(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 相關(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
...

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

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

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

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

相關(guān)文章

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

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

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

    Shell中set與shopt命令選項的含義和使用示例

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

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

    最近因為工作需要,需要編寫shell腳本。編寫大量shell腳本時,累計了大量經(jīng)驗,也讓自己開始迷糊幾種函數(shù)輸出調(diào)用的區(qū)別。后面和前輩們請教了一下這個問題,大致明白了區(qū)別。這里分享給大家,希望對大家能有所收獲。下面來一起看看吧。
    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腳本實現(xiàn)自動發(fā)送和收取郵件的設(shè)置方法

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

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

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

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

    shell 腳本自動搭建nfs服務的方法示例

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

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

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

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

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

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

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

最新評論

武汉市| 新郑市| 新建县| 萨迦县| 林芝县| 区。| 高唐县| 柘城县| 成安县| 台中市| 辉县市| 广宁县| 龙海市| 永济市| 巴林右旗| 慈利县| 慈利县| 南木林县| 朝阳县| 汉寿县| 阳春市| 柞水县| 蒙阴县| 新宁县| 海兴县| 定远县| 和田县| 沙雅县| 哈密市| 元阳县| 甘肃省| 鹤山市| 邹平县| 交口县| 华阴市| 邹城市| 绵阳市| 克东县| 万盛区| 大埔县| 称多县|