2017-06-15 13 views
0

に基づいてテキストファイル内の単語を置き換えます。A.TXT、B.TXT私は2つのファイルを持って見つけて、テキストファイルの名前

どちらも、これらのファイルは、それらの文字NODEが含まれています。

それぞれのファイルのNODEをそれぞれA.txtとB.txtのA_NODEとB_NODEに置き換えたいとします。

私はforループとsedが関わっていることを知っていますが、これを理解することはできません。助言がありますか?

私が考えていた:

for file in *; do sed -i 's/NODE/$file.NODE/g' file; done 
+2

を参照してください:[bashで、単一引用符と二重引用符の違い](https://stackoverflow.com/q/6697753/3776858) – Cyrus

+0

デバッグに 'set -x'や' echo sed -i '/ NODE/$ file.NODE/g' file'を試しましたか? –

答えて

0
for file in *; do sed -i "s/NODE/$(basename -s .txt file)_NODE/g" file; done 
  • 二重引用符(")の代わりに、単一引用符(')は($式を置き換える)、bashの変数補間を可能にします。
  • $(...)は任意のシェルコマンドを実行し、その結果を挿入します。
  • basename -s .txtは、ディレクトリ部分と接尾辞.txtをファイル名から削除します。
+0

その正確なコマンドは機能しませんでしたが、あなたのコメントに基づいて少し修正しました。 sed -i "s/NODE/$(basename -s .txt" $ file ")_ NODE/g" $ file;を実行します。完了 – aram

0

は@sapanoiaありがとう:

をこの作品:

for file in *; do sed -i "s/NODE/$(basename -s .txt "$file")_NODE/g" $file; done

関連する問題