最初に、潜在的に重複する質問に対するお詫び。私はスクリプティングを新しくしているので、検索するキーワードを見つけることさえできません。ことで、私はできる限り問題の説明を簡素化することを試みた:awk、gsub、アンパサンドと予想外の拡張
私はこれだけの行を含むテキストファイル(test.txtという)があります。
REPLACE
を私は、次のコマンドを実行しましたファイルのテキスト(すなわち、)をコード変数値if (A & B)
で置き換えると仮定します。
if (A & B)
実際の出力は何とかアンパサンドがgsub
正規表現のパラメータである、 'REPLACE' に展開されています:
code
変数の値であるとして印刷されることを期待
code="if (A & B)" ; awk -v var="${code}" '{ gsub(/REPLACE/, var); print }' test.txt
の予想される出力
if (A REPLACE B)
おそらく私はアンプをエスケープする必要があります幸いなことに、code
変数の人口は私のコントロールから外れているので、私はその値を手動で操作することはできません。
ありがとう:バージョンのawk FYI
は、 "1.1(GNU MPFR 3.1.5、GNU MP 6.1.2)GNU Awkの4.1.4、API" です!
'&'「代替を意味し、完全一致 "を含む、awk regexesで。あなたはそれをエスケープする必要があります: 'code =" if(A \\&B) "'(シェルが拡張もしているので、2つのbaclossがあります) – grochmal