bashスクリプトの一部としてfile1.txtから文字列を削除しようとしています。
たとえば、このファイルには次のものが含まれます。
@some_group1 = take.me bake.shake test.test push.pull
@some_group2 = test.test take.me bake.shake push.pull
@some_group3 = take.me bake.shake push.pull test.test
私が望む出力は次のとおりです。
@some_group1 = take.me bake.shake push.pull
@some_group2 = take.me bake.shake push.pull
@some_group3 = take.me bake.shake push.pull
sedコマンドを試してみましたが、正常に動作しませんでした。
sed -i 's/\[?]\$username\[?]\/ /g' file1.txt
これを行うための最良の方法は何ですか?
答え1
sed
解決策:
username="test.test"
sed "s/ *$username */ /" file
出力:
@some_group1 = take.me bake.shake push.pull
@some_group2 = take.me bake.shake push.pull
@some_group3 = take.me bake.shake push.pull
答え2
一重引用符を使用して変数名を挿入するには、次のようにします。
sed 's/ '"$username"'//' file1.txt
あまりきれいではありませんが、時には便利かもしれません。一重引用符または二重引用符を直接使用しても、コードに潜在的な問題があります。変数に「/」が含まれている場合、sedはそれを「s」コマンドの一部として扱います。つまり、4つのスラッシュがあり、次の構文エラーが発生します。
sed: bla bla bla: unknown option to `s' #good luck debugging that :)
この問題を解決するために、私は通常私の変数に現れる可能性が最も低い他の構文区切り文字を選択します。たとえば、新しいコマンドは次のようになります。
sed 's# '"$username"'##' file1.txt