for inループでsedを使用してファイルから単語を削除する

for inループでsedを使用してファイルから単語を削除する

テキスト(txtではない)を含む「book」ファイルがあります。また、そのファイルから削除する必要がある単語のリストもあります。このスクリプトを作成しましたが、何らかの理由で実行後にファイルが変更されたことを確認しようとすると、変更はありません。結果を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

おすすめ記事