Bash
在 for in 循環中使用 sed 從文件中刪除單詞
我有一個包含文本的文件“書”(不是 txt)。我還有一個需要從所述文件中刪除的單詞列表。我已經編寫了這個腳本,但是由於某種原因,當我嘗試檢查執行後文件是否被更改時,我沒有得到任何更改。我嘗試將結果輸出到 book > output.txt 但仍然“輸出”與“書”具有相同的文本。
編碼 :
for word in {am pm cm words count ......} do sed -i 's/${word}//g' book done
你知道為什麼列表中的單詞沒有被刪除嗎?
變數不在單引號內展開,而是在雙引號內展開。你應該去
for word in am pm cm words count etc do sed -i "s/${word}//g" book done
請注意,您也可以
sed
只呼叫一次並使用sed -i "s/am\|pm\|cm\|words\|count//g" book
如果單詞列表真的很長,您可以使用一個數組
bash
並對其進行格式化。words=(am pm cm words count etc) fmt=$(IFS='|'; printf '%q' "s/${words[*]}//g") echo sed -i "$fmt" book
- 如果需要,只需在數組單詞中添加更多元素。
- 刪除
echo
所以 sed 可以完成它的工作。