Mic*_*ant 27 sed text-processing
我有一个 html 文件。我想删除所有不以<tr>
.
我试过:
cat my_file | sed $'
s/^[^tr].*//
' | sed '/^$/d'
Run Code Online (Sandbox Code Playgroud)
但它删除了所有行。
Cyr*_*rus 36
用 GNU sed 试试这个:
sed -n '/^<tr>/p' file
Run Code Online (Sandbox Code Playgroud)
或者
sed '/^<tr>/!d' file
Run Code Online (Sandbox Code Playgroud)
use*_*445 13
sed -e '/^<tr>/d'
Run Code Online (Sandbox Code Playgroud)
之间的部分/
是一个正则表达式。该d
命令删除匹配的行。
更新:哎呀,对不起,我看到你说不。所以
sed -e '/^<tr>/!d'
Run Code Online (Sandbox Code Playgroud)
哪里!
否定了比赛的意义。
如果必须是sed
:
sed -ni '/^<tr>/p' file
Run Code Online (Sandbox Code Playgroud)
-i
就地编辑文件,-n
防止sed
打印所有行,正则表达式意味着匹配所有以 ( ^
)开头的行<tr>
,并且将打印这些行 ( p
)。
和grep
:
grep -E '^<tr>' file
Run Code Online (Sandbox Code Playgroud)
使用-E
grep 解释扩展正则表达式。
和awk
:
awk '/^<tr>/' file
Run Code Online (Sandbox Code Playgroud)
或纯bash
:
while IFS= read -r l; do [[ "$l" =~ ^\<tr\> ]] && echo $l; done <file
Run Code Online (Sandbox Code Playgroud)
是[[
bash 内部条件表达式。我们$l
与正则表达式进行比较,如果成功 ( &&
),我们将打印该行echo
。