我试图使用Shellscript评论一组行。
$>cat abc.txt
[entry1]
abcd
efgh
ijkl
mnop
[entry2]
abcd
efgh
ijkl
mnop
qust
[entry3]
abcd
efgh
ijkl
mnop
qrst
uvwx
yz
[entry4]
...
...
...
...
从上面的文件中,我想找到[entry2]并注释[entry2]到[entry3]之间的所有行 注意:条目之间的行数不相同。
我想要输出如下..
$>cat abc.txt
[entry1]
abcd
efgh
ijkl
mnop
#[entry2]
#abcd
#efgh
#ijkl
#mnop
#qust
[entry3]
abcd
efgh
ijkl
mnop
qrst
uvwx
yz
[entry4]
...
...
...
...
我认为我们可以用sed做到这一点。但不确定确切的用法。
有人可以建议吗?
答案 0 :(得分:2)
正如您猜测的那样,sed -E '/^\[entry2\]/,/^$/s/^(.)/#\1/' file
[entry1]
abcd
efgh
ijkl
mnop
#[entry2]
#abcd
#efgh
#ijkl
#mnop
#qust
[entry3]
abcd
efgh
ijkl
mnop
qrst
uvwx
yz
[entry4]
...
...
...
...
是您的朋友。您可以在模式之间匹配文本以实现您想要的效果。
/pattern1/,/pattern2/
工作原理
s
匹配模式之间的文本,包括模式.
此处适用于所有此类行。^
)。()
匹配行的开头\1
用于分组字符,[]
用于替换部分以替换组注意强>
[
在sed中有特殊含义,它们代表字符范围。要搜索文字]
或\[
,您需要逃避它们 - 即{{1}} - 正如我们在此处所做的那样。
答案 1 :(得分:0)
awk ' /^\[entry2\]/ {flag=1} /^\[entry3\]/{flag=0} flag { $0="#"$0}1' entry
[entry1]<br>
abcd<br>
efgh<br>
ijkl<br>
mnop<br><br>
#[entry2]<br>
#abcd<br>
#efgh<br>
#ijkl<br>
#mnop<br>
#qust<br><br>
#
[entry3]<br>
abcd<br>
efgh<br>
ijkl<br>
mnop<br>
qrst<br>
uvwx<br>
yz<br>
[entry4]
...
...
...
...