debug: Debug
私のbashscriptでSedがファイルを見て発見${SourceP}
したら、その行を削除して環境にエクスポートしたいと思います。Debug=Debug
sed -i '/debug: Debug/,+0 d' ${SourceP} && export Debug=Debug
しかし、残念ながらDebug=Debug
パターンが見つからなくてもエクスポートされます。
これを達成するには:Debug=Debug
パターンが見つかった場合にのみ行をエクスポートして削除します。
sedは使えませんか?
私はこれを試しましたが、awk
そのうちの1つも動作しません。
awk -i inplace '!/debug: Debug/' ${SourceP} && export Debug=Debug
編集:正確に検索できたらと思いますdebug: Debug
。
答え1
awk
どういうわけか部品から情報を抽出する必要があります。変数をエクスポートまたは使用できます。終了ステータス。
awk -i inplace 'BEGIN {err = 1}; {if (NR == 1 && /([[:space:]]|^)debug: Debug([[:space:]]|$)/) {err = 0} else {print}}; END {exit err}' ${SourceP} && export Debug=Debug
説明する
BEGIN {err = 1}
:最初はエラー状態を1に設定します。- 次に、最初の行にあり、
NR == 1
その行に&&
エラーがある場合は、/([[:space:]]|^)debug: Debug([[:space:]]|$)/
エラー状態を0(err = 0
)に設定します。それ以外の場合は、他のすべての行を印刷します。この正規表現はdebug: Debug
スペースまたは行の先頭で始まり、スペースまたは行の終わりで終わります。 - スクリプトが終了すると
awk
エラー状態で終了します{exit err}
。 - したがって
/debug: Debug/
、そのファイルで見つかった場合、エラー状態はゼロになり&&
実行されます。
答え2
test "$(sed -i -e '/debug: Debug/{w /dev/fd/1' -e 'd}' "$SourceP")" && export Debug=Debug
メモ:
文は${SourceP}
純粋な飾りです。それは単純さと同じくらい危険です$SourceP
。欲しい引用する次に変更します:"$SourceP"
または"${SourceP}"
。
/dev/fd/1
ほとんどの最新のUnixでサポートされており、GNU専用であり、移植性が非常に低いですsed -i
。awk -i