這個 Linux shell 腳本行有什麼作用?

這個 Linux shell 腳本行有什麼作用?

我試著確定以下 shell 腳本行到底在做什麼:

grep --files-with-matches '>' . | sort | uniq | xargs perl -pi~ -e 's/9Kp/9K /' /home/user/DATAFILE.DAT

我很確定它正在嘗試對“9Kp”進行全局搜尋並在指定的資料檔案中替換為“9K”,但我不清楚 grep 命令在此之前正在做什麼。

答案1

grep --files-with-matches '>' .

>在目前目錄 ( ) 中搜尋.並僅列印符合檔案的檔案名稱 ( --files-with-matches)。

注意grep不會返回任何事物如果您給它一個目錄 ( .) 但忘記啟用「遞歸」模式。正確的命令是

grep --files-with-matches --recursive '>' .

或簡單地

grep -Rl '>' .

| sort
| uniq

對結果進行排序,並刪除重複項。

| xargs perl -pi~ -e 's/9Kp/9K /' /home/user/DATAFILE.DAT

執行給定命令 ( perl ...),並將標準輸入中的每個單字1作為附加參數傳遞。

結果中的每個文件grep以及/home/user/DATAFILE.DAT文件都會透過將文字「9Kp」替換為「9K 」進行更新。舊文件的備份帶有尾隨波浪號。

1注意:單字, 不是。這意味著帶有空格的檔案名稱將被視為多個名稱。xargs -d'\n'會更好,儘管並不完美。

相關內容