我有一个包含文本的文件“book”(不是txt)。我还有一个需要从所述文件中删除的单词列表。我已经编写了这个脚本,但由于某种原因,当我尝试检查文件在执行后是否已更改时,我没有得到任何更改。我尝试将结果输出到 book > output.txt 但“output”仍然具有与“book”相同的文本。
代码 :
for word in {am pm cm words count ......}
do
sed -i 's/${word}//g' book
done
您知道为什么列表中的单词没有按应有的方式删除吗?
答案1
变量不在单引号内展开,而是在双引号内展开。你应该去
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
答案2
如果单词列表非常长,您可以使用数组bash
并对其进行格式化。
words=(am pm cm words count etc)
fmt=$(IFS='|'; printf '%q' "s/${words[*]}//g")
echo sed -i "$fmt" book
如果需要,只需在数组单词中添加更多元素即可。
删除
echo
所以 sed 可以完成它的工作。