![在分隔符 | 之后第一次出现 = 时添加双引号在一个文件中](https://linux22.com/image/154035/%E5%9C%A8%E5%88%86%E9%9A%94%E7%AC%A6%20%7C%20%E4%B9%8B%E5%90%8E%E7%AC%AC%E4%B8%80%E6%AC%A1%E5%87%BA%E7%8E%B0%20%3D%20%E6%97%B6%E6%B7%BB%E5%8A%A0%E5%8F%8C%E5%BC%95%E5%8F%B7%E5%9C%A8%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%AD.png)
将双引号添加到文件中第一次出现的=
分隔符后|
输入:
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