我想获取未用哈希注释掉的文件的第一行,然后在该行之后添加一行文本。
我设法获得了行号:
sed -n '/^\s*#/!{=;q}' file // prints 2
以及插入文本(手动指定行):
sed '2 a extralinecontent' file
我无法让他们作为一个班轮或成批地一起工作。
我尝试了命令替换(使用$(command)
以及反引号),但从bash收到错误:
sed '$(sed -n '/^\s*#/!{=;q}' file) a extralinecontent' file
-bash: !{=: event not found
并且也尝试了许多其他组合,但没有运气。
我在macOS上使用gnu-sed(通过brew)。
这是使用GNU sed
进行操作而无需两次读取文件的方法
$ cat ip.txt
#comment
foo baz good
123 456 7889
$ sed -e '0,/^\s*[^#[:space:]]/ {// a XYZ' -e '}' ip.txt
#comment
foo baz good
XYZ
123 456 7889
GNU sed
如果另一个地址是正则表达式,则允许第一个地址为0
,这样即使第一行与条件匹配也可以使用/^\s*[^#[:space:]]/
,因为sed
不支持所有格量词,需要确保与字符类匹配的第一个字符不是#
或空格字符//
是重复上一个正则表达式的方便快捷方式a XYZ
您要附加的行(请注意,您的问题提到insert
,因此,如果需要,请使用i
而不是a
)]这可能对您有用(GNU sed):
sed -e '/^\s*#/b;a extra line content' -e ':a;n;ba' file
从文件开头的注释开始的任何行中删除,在第一行之后添加非注释的多余行,并继续获取/打印文件的所有其余行。