我搜索一个模式,说“START OF ARAMBOL”,它在文件中匹配。现在我想注释从第 1 行到当前匹配模式第 1 行的每一行。我必须对 200 多个文件执行此操作。
我也可以使用 perl 来做到这一点,但是有没有好的 sed 方法可以做到这一点。
谢谢
答案1
作为演示这一概念的一句台词:
echo -e 'a\nb\nc\nPATTERN\nd\ne\nf' | sed '0,/PATTERN/ s/^/#/'
你只需要适应你的环境:
- 至于“模式”
- 我假设'#'作为注释字符
- 以及如何将其应用到您的所有文件。如果它们都是“fileXXX.txt”,您可以运行:
sed -i '0,/PATTERN/ s/^/#/' file*txt
答案2
您的问题询问sed
但包含gvim
标签,因此这里是ed
/ex
答案:
ed file <<EOF
0,/"$pattern"/s/^/"$comment_char"/
wq
EOF
它看起来非常像sed
答案是因为sed
并且ex
源自ed