我想获取未用哈希注释掉的文件的第一行,然后在该行之前在该行之后附加一行文本。
我设法得到了行的编号:
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(:
sed -e '/^s*#/b;a extra line content' -e ':a;n;ba' file
从文件开头以注释开头的任何行中解脱出来,在第一行之后附加一行不是注释的额外行,并继续获取/打印文件的所有剩余行。
这是一种无需两次读取文件即可使用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
(