Bash

在 for in 循環中使用 sed 從文件中刪除單詞

  • March 26, 2020

我有一個包含文本的文件“書”(不是 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 可以完成它的工作。

引用自:https://unix.stackexchange.com/questions/575190