将双引号添加到文件中第一次出现的=
分隔符后|
输入:
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
并将数据视为两个|
分隔的字段。该调用将第二个字段中的sub()
第一个字段替换为。然后打印修改后的行。=
"="
更改=
后的每个分隔符(如果有两个以上字段),使用循环:
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