Bash
僅在必要時從文本文件中刪除尾隨空格
我正在使用刪除尾隨空格
sed -i 's/[ \t]*$//' *.txt
但是,此命令將重寫所有文件。
有沒有一種方便的方法來判斷文本文件中是否有尾隨空格並跳過沒有尾隨空格的那些?
您可以使用
grep
first 來查找是否有需要修改的行,儘管在最壞的情況下仍會讀取文件兩次(在只有最後一行需要修改的情況下):for f in ./*.txt; do grep -q '[[:blank:]]$' "$f" && sed -i 's/[[:blank:]]*$//' "$f" done
一種方法可以
find/grep/sed
如圖所示:find . -maxdepth 1 -type f -name '*.txt' \ -exec grep -q '[[:blank:]]$' {} \; \ -exec sed -Ei -e 's/[[:blank:]]+$//' {} +
- 如果 1 在目前目錄中執行,則使用 -maxdepth 進行查找。
{} \;
指的是傳遞給的文件的名稱,grep
並且\;
正在轉義作為命令結束指示符的 shell 元字元分號。我們逃避它,讓它到達-exec
. 你也可以把它寫成';'
{} +
您現在已經知道{}
了,這+
意味著您傳遞了盡可能多的文件名sed
(基本上,不是傳遞{}
目前find
結果中的單個,而是在呼叫之前累積一個{}
用作參數的列表sed
)。這使我們能夠最大限度地減少sed
呼叫次數。