如何使用 sed 将字符附加到没有换行符的行?

如何使用 sed 将字符附加到没有换行符的行?

我有以下文字:

Variables = X, Y, Z
Zone T="Run 0020 Probe Points", I=19, J=1, F=POINT
DT=(double double double)
AUXDATA Zone_1_X = 28.180958

我想"在 周围添加双引号 ( )28.180958以获得:

Variables = X, Y, Z
Zone T="Run 0020 Probe Points", I=19, J=1, F=POINT
DT=(double double double)
AUXDATA Zone_1_X = "28.180958"

我可以成功地使用sed -i 4s/=\ /=\ \"/ ...在数字前面插入双引号,但附加双引号是难以捉摸的。我已经尝试使用 sed 的各种方法在 AUXDATA 行上附加双引号,但双引号出现在 AUXDATA 行下方,而不是实际行的末尾。例如,sed 4a'"' data.txt制作:

Variables = X, Y, Z
Zone T="Run 0020 Probe Points", I=19, J=1, F=POINT
DT=(double double double)
AUXDATA Zone_1_X = 28.180958
"

我尝试过的所有操作要么将双引号 ( ") 放在 AUXDATA 行上方或下方。如何在 AUXDATA 行本身末尾获得双引号?

答案1

技巧是匹配行末尾的某些内容,例如该行上最后一个以空格分隔的标记,然后在该标记周围使用双引号重写该行。

该命令将执行以下操作:

sed -E 's/^(AUXDATA.*) ([^ ]*)$/\1 "\2"/' < foo

-E选项告诉 sed 我们将使用扩展的正则表达式语法。

正则表达式本身将该行分成两部分:

  • AUXDATA行首的部分(^表示行首),后跟以空格结尾的任意文本

  • 行中不包含空格并在行尾结束的部分

具体来说,在这种情况下,第一块匹配AUXDATA Zone_1_X =,第二块匹配28.180958sed然后将该行替换为:

  • 第一部分,\1后跟一个空格
  • 双引号,然后是第二部分\2和另一个双引号。

输入文件的所有其他行均不经更改地通过sed

相关内容