我試著確定以下 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'
會更好,儘管並不完美。