sed - 如何删除所有不匹配的行

sed - 如何删除所有不匹配的行

我有一个 html 文件。我想删除所有这样做的行不是从...开始<tr>

我试过:

cat my_file | sed $'
s/^[^tr].*//
' | sed '/^$/d'

但它删除了所有行。

答案1

使用 GNU sed 试试这个:

sed -n '/^<tr>/p' file

或者

sed '/^<tr>/!d' file

答案2

sed -e '/^<tr>/d'

之间的部分/是正则表达式。该d命令删除匹配的行。

更新:哎呀,抱歉我看到你说不。所以

sed -e '/^<tr>/!d'

哪里!否定了比赛的意义。

答案3

如果必须是sed

sed -ni '/^<tr>/p' file

-i就地编辑文件,-n防止sed打印所有行,正则表达式意味着匹配所有以 ( ^)开头的行<tr>,并且将打印这些行 ( p)。

grep

grep -E '^<tr>' file

使用-Egrep 解释扩展正则表达式。

awk

awk '/^<tr>/' file

或纯bash

while IFS= read -r l; do [[ "$l" =~ ^\<tr\> ]] && echo $l; done <file

[[bash 内部条件表达式。我们$l与正则表达式进行比较,如果成功 ( &&),我们将打印该行echo

答案4

最简单和最简单的答案是:

grep '^<tr>' path/to/file 

如果您不想直接修改文件(就像使用 sed 一样),这将仅打印以以下行开头的文件,这可能会很好。

然后,如果您喜欢在输出中看到的内容,您可以将其打印到文件中> file

在这种情况下,您可以在尝试某些命令之前备份文件,从而节省一些时间。

相关内容