grep和管道符

2021-05-23 05:57:58 字數 1367 閱讀 8474

找出資料夾下包含 「aaa」 同時不包含 「bbb」的檔案,然後把他們重新生成一下。要求只能用一行命令。

我對linux 是個白痴,工作了之後才開始接觸的,會用的命令只有那幾個常用的。這個問題對我來說就有點難度,我只是大概知道查詢檔案用 grep ,其他的就不知道了。不過沒關係,用google ,查詢到 grep 的完整用法:

1、grep -l 『boss』 * 顯示所有包含boss的檔名。

2、grep -n 『boss』 file在匹配行之前加行號。

3、grep -i 『boss』 file顯示匹配行,boss不區分大小寫。

4、grep -v 『boss』 file顯示所有不匹配行。

5、grep -q 『boss』 file找到匹配行,但不顯示,但可以檢查grep的退出狀態。(0為匹配成功)

6、grep -c 『boss』 file只顯示匹配行數(包括0)。

7、grep 「$boss」 file擴充套件變數boss的值再執行命令。

8、ps -ef|grep 「^*user1″ 搜尋user1的命令,即使它前面有零個或多個空格。

9、ps -e|grep -e 『grant_server|commsvr|tcpsvr|dainfo』 查詢多個字串的匹配(grep -e相當於egrep)

了解了grep的引數之後,問題就解決了一半了,因為可以搜尋出符合條件的檔案了。不過光有grep 還是不行,因為要把搜尋出來的檔名作為引數傳給 generate 命令。ok,接下來該管道符出場了。

即使是像我這樣對linux只是有一點了解的人也經常用到管道符,比如「|」,示例: ls -a | more 。但是對於管道符的具體意義和它做了什麼我就不知道了,沒關係,google 一下,找到一些資料:

利用linux所提供的管道符「|」將兩個命令隔開,管道符左邊命令的輸出就會作為管道符右邊命令的輸入。連續使用管道意味著第乙個命令的輸出會作為第二個命令的輸入,第二個命令的輸出又會作為第三個命令的輸入,依此類推。

所以查詢的時候可以這樣寫:

grep -rl 「aaa」 * | grep -v 「bbb」

這樣右邊的命令就可以從前面的結果中篩選了。然後還有 generate 命令,因為生成檔案的命令格式是這樣的:

generate 檔名

不過如果直接使用 generate grep -rl 「aaa」 * | grep -v 「bbb」 的話會出錯,因為命令會從左向右執行,這條命令就會把grep作為乙個檔名來看待。怎麼辦呢?這個時候就要使用 · (鍵盤上數字鍵1 旁邊的那個符號,和「~」在乙個按鍵上)來做命令替換了,用 · 把後面的 grep 命令包起來就好了,這樣:

generate ·grep -rl 「aaa」 * | grep -v 「bbb」·

然後就搞定了。

grep和管道符

找出資料夾下包含 aaa 同時不包含 bbb 的檔案,然後把他們重新生成一下。要求只能用一行命令。我對linux 是個白痴,工作了之後才開始接觸的,會用的命令只有那幾個常用的。這個問題對我來說就有點難度,我只是大概知道查詢檔案用 grep 其他的就不知道了。不過沒關係,用google 查詢到 gre...

grep和管道符

grep 的完整用法 1 grep l boss 顯示所有包含boss的檔名。2 grep n boss file在匹配行之前加行號。3 grep i boss file顯示匹配行,boss不區分大小寫。4 grep v boss file顯示所有不匹配行。5 grep q boss file找到匹...

重定向和管道符

重定向和管道符 1.重定向 程式 指令 資料 命令 變數 在程式中,資料如何輸入?如何輸出?資料輸入 鍵盤 標準輸入,但並不是唯一輸入方式 stdin echo 123456 passwd stdin username 例如 功能新增使用者 useradd.sh txt文字文件1000個使用者 us...