在SED中删除具有特定事件模式的行?

时间:2011-07-20 05:39:10

标签: bash sed text-processing

请花几秒钟。我想删除第六个<ul>出现的行。  我谷歌这样做的方式,我试过

sed -i '/^<ul>$/ d/6' file

然而,事实证明

sed: -e expression #1, char 9: extra characters after 

错误。

3 个答案:

答案 0 :(得分:2)

AFAIK,sed你不能轻易做到这一点。您可以将所有行连接到一个字符串,然后删除第6个出现,然后拆分字符串,但使用awk更容易:

awk '/<ul>/ {ul++} ul == 6 { getline } 1' INPUTFILE > TMPFILE && mv TMPFILE INPUTFILE

测试结果如下:https://ideone.com/3YpVu

注意:它会丢弃第6行<ul>的整行,并假设每行只能找到一个<ul>

HTH

答案 1 :(得分:1)

awk '/<ul>/ && ++count == 6 {next} {print}' filename

答案 2 :(得分:0)

perl -p -i -e "s/^<perl-regex-here>$\n//g" <filename>应该删除与您在任何现代unix系统上提供的perl正则表达式匹配的任何行。否则,如果你计算出现并在第6次出现时终止该行,我知道没有命令可以在一行中执行。