Sed 如何替换以文件中某个内容开头的第二行

Sed 如何替换以文件中某个内容开头的第二行,sed,Sed,我尝试用以下代码完全替换以[cols=开头的第二行,但是sed忽略了regexp部分(.*) sed -i ':a N;$!ba; s/\[cols=.*/\[cols=\"25%\"\]/2' myfile.txt 如果我删除*,它会将[cols=替换为[cols=“25%”],但不是整行 有什么想法吗?用awk $ cat ip.txt foo [cols="3%"] baz [cols="12%"] xyz [cols=&qu

我尝试用以下代码完全替换以
[cols=
开头的第二行,但是sed忽略了regexp部分(.*)

sed -i ':a N;$!ba; s/\[cols=.*/\[cols=\"25%\"\]/2' myfile.txt
如果我删除
*
,它会将
[cols=
替换为
[cols=“25%”]
,但不是整行

有什么想法吗?

awk

$ cat ip.txt 
foo
[cols="3%"]
baz
[cols="12%"]
xyz
[cols="50%"]

$ awk '/\[cols=/ && ++c==2{$0 = "[cols=\"25%\"]"} 1' ip.txt
foo
[cols="3%"]
baz
[cols="25%"]
xyz
[cols="50%"]
  • /\[cols=/
    匹配包含
    [cols=
    • ++c==2
      检查计数是否为
      2
      (此处
      c
      的初始值为
      0
  • $0=“[cols=\“25%\”]”“
    将整行更改为所需字符串
  • 1
    打印
    $0
如果您有
GNU awk
,请使用
-i inplace
将更改写回输入文件。

使用
awk

$ cat ip.txt 
foo
[cols="3%"]
baz
[cols="12%"]
xyz
[cols="50%"]

$ awk '/\[cols=/ && ++c==2{$0 = "[cols=\"25%\"]"} 1' ip.txt
foo
[cols="3%"]
baz
[cols="25%"]
xyz
[cols="50%"]
  • /\[cols=/
    匹配包含
    [cols=
    • ++c==2
      检查计数是否为
      2
      (此处
      c
      的初始值为
      0
  • $0=“[cols=\“25%\”]”“
    将整行更改为所需字符串
  • 1
    打印
    $0

如果您有
GNU awk
,请使用
-i inplace
写回对输入文件的更改。

您可以添加一些示例输入行(比如3-5行)并完成预期的输出吗?另外,您是否使用
GNU sed
,因为您有
-i
而无需附加参数..您可以添加一些示例输入行吗(假设3-5行)并完成预期输出?另外,您是否使用
GNU sed
,因为您没有附加参数就有
-i
。。