在分隔符 | 之后第一次出现 = 时添加双引号在一个文件中

在分隔符 | 之后第一次出现 = 时添加双引号在一个文件中

将双引号添加到文件中第一次出现的=分隔符后|

输入:

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

相关内容