result.txt
表示するためのサンプルテキストファイルがあります。
{HEX}.A.Bs
{HEX}.A.Bss
{HEX}.A.Bsss
{HEX}.A.Bssss
ただし、実際のアプリケーションでは、コンテンツにresult.txt
次の文字を1行ずつ含めることができます。
/usr/local/abc.txt
/var/tmp/
png
OIPOP()_+(_)&*#)@IOJDNU*@Utest
Bashスクリプトのパラメータを介して1行の文字列を削除したいと思います。したがって、私のbashスクリプトにはtest.sh
次のコードがあります。
!/bin/sh
#test.sh
result=result.txt
del="$1"
sed -i "/$del/d" $result
cat result.txt
実施例1
したがって、削除するには、"{HEX}.A.Bs"
パラメータを使用して次のスクリプトを実行します。
./test.sh "{HEX}.A.Bs"
"{HEX}.A.Bs"
これにより、insideという文字列が削除されます。result.txt
しかし、中にあるすべては result.txt
削除されました。予想される出力は次のようになります。
{HEX}.A.Bss
{HEX}.A.Bsss
{HEX}.A.Bssss
実施例2
削除したい場合"{HEX}.A.Bss"
:
./test.sh "{HEX}.A.Bss"
上記の例文字列を1つだけ残す "{HEX}.A.Bs"
~へ result.txt
。文字列のみを削除する必要があります"{HEX}.A.Bss"
。したがって、予想される結果は次のとおりです。実施例2次の結果を生成する必要があります。
{HEX}.A.Bs
{HEX}.A.Bsss
{HEX}.A.Bssss
ここでコードにどのような問題があるのかわかりますか?
ベストアンサー1
文字列に一致する行を削除するには、内部編集用のGNU awk(GNU sedと同じ)などのリテラル文字列を理解するツールを使用します。
del="$1" awk -i inplace '($0"") != ENVIRON["del"]' "$result"