=
ファイルに最初に表示される区切り文字の後に二重引用符を追加します。|
入力する:
Ver=7|errmsg=0=sucess,1=failue
出力が欲しいです。
Ver"="7|errmsg"="0=success,1=failue
=
二重引用符は、区切り文字の最初の後にのみ追加する必要があります|
。
awkを使用するとこれを達成できますが、awk -i inplaceを使用するとファイル内でこれらの変更を実行することはできません。
sedや他の方法で変更できますか?
答え1
$ cat file
Input: Ver=7|errmsg=0=sucess,1=failue
$ awk -F '|' 'BEGIN { OFS=FS } { sub("=", "\"=\"", $2); print }' file
Input: Ver=7|errmsg"="0=sucess,1=failue
これはawk
データを2つの別々の|
フィールドとして使用して処理します。この呼び出しは最初のフィールドを2番目のフィールドに置き換えますsub()
。次に、修正された行を印刷します。=
"="
=
変更各区切り記号(フィールドが3つ以上の場合)ループを使用します。
awk -F '|' 'BEGIN { OFS=FS } { for (i = 2; i <= NF; ++i) sub("=", "\"=\"", $i); print }' file
最新のGNUを使用して変更するにはawk
:
awk -i inplace -F '|' 'BEGIN { OFS=FS } { for (i = 2; i <= NF; ++i) sub("=", "\"=\"", $i); print }' file
GNUでない場合awk
:
cp file file.tmp
awk -F '|' 'BEGIN { OFS=FS } { for (i = 2; i <= NF; ++i) sub("=", "\"=\"", $i); print }' file.tmp >file
rm file.tmp
答え2
sed 's/=/"="/1' file |sed 's/=/"="/2'
答え3
GNU sed
次のように拡張正規表現エンジンを使用できます。
$ sed -Ee 's/((^|[|])[^|=]*)=/\1"="/g' input.txt