次のような文字列があるとしましょう。
xyz="123" ; acd="234" ; plk="1234" ; apl="3456" ; www="2342"
plk="123"
今、andを無視してsedを使って交換したいと思います。plk="789"
;
""
出力:
xyz="123" ; acd="234" ; plk="789" ; apl="3456" ; www="2342
この問題を解決するのに役立ち、他のコマンドを使用できるかどうか教えてください。
答え1
plk="1234"
に置き換えるには、plk="789"
次のことができます。
$ sed 's/plk="1234"/plk="789"/g' file
xyz="123" ; acd="234" ; plk="789" ; apl="3456" ; www="2342"
notplk="1234"
ただし、この項目もに置き換えられます。これを防ぐために、単語の境界のみを一致させるためにplk="789"
使用できます。\<
$ sed 's/\<plk="1234"/plk="789"/g' file
xyz="123" ; acd="234" ; plk="789" ; apl="3456" ; www="2342"
\<
100%移植可能かどうかは不明なので、もしそうなら、次のようにすることもできます。
$ sed -E 's/(^| )plk="1234"/plk="789"/g' file
xyz="123" ; acd="234" ;plk="789" ; apl="3456" ; www="2342"
または代わりにPerlを使用してください:
$ perl -pe 's/\bplk="1234"/plk="789"/g' file
xyz="123" ; acd="234" ; plk="789" ; apl="3456" ; www="2342"
上記のすべてのコマンド(およびsed
)を使用すると、フラグを追加して元のファイルを適切に編集perl
できます。-i
上記のコマンドは置き換えられますみんなplk="1234"
ファイルの各行で発生した回数。質問には記載していませんが、タイトルに「列 n」を記載しました。列をどのように定義したのか、どういう意味なのかわかりませんが、;
3番目に区切られた列でのみこの置換を実行したい場合は、次のことを試すことができます(GNUを使用awk
)。
$ awk -F';' 'BEGIN{OFS=";"}{$3=gensub(/plk="1234"/,"plk=\"789\"",1,$3); }1' file
xyz="123" ; acd="234" ; plk="789" ; apl="3456" ; www="2342"