在下面的sed中,我试图删除所有包含ID_且以奇数结尾的行。这两个命令都会执行,但返回的文件不变。
sed
ID_
文件
ID_0111 xxx ID_0112 xxx ID_0113 xxx ID_0114 xxx xxxxxxxxxxxxxxxx
所需
ID_0112 xxx ID_0114 xxx xxxxxxxxxxxxxxxx
sed '/ID_[13579]/d' file.txt sed 's|ID_[13579]$| |g'
56lgkhnf1#
您可以使用sed:
sed '/^ID_[^ ]*[13579] /d' file ID_0112 xxx ID_0114 xxx xxxxxxxxxxxxxxxx
在这里,正则表达式模式/^ID_[^ ]*[13579] /匹配一行,该行以ID_开头,后跟0个或多个非空格字符,以[13579]结尾,然后匹配空格。或者,使用awk,你可以这样做:
/^ID_[^ ]*[13579] /
[13579]
awk
awk '$1 !~ /^ID_/ || $1 ~ /[02468]$/' file ID_0112 xxx ID_0114 xxx xxxxxxxxxxxxxxxx
pxyaymoc2#
在奇数之前可以有任何数字,奇数后面必须有一个空格。
sed '/ID_[0-9]*[13579] /d'
fivyi3re3#
你可以像这样使用GNU grep:
grep
grep -P -v '^ID_\d*[13579]\s' in_file > out_file
在这里,grep使用以下选项:-P:使用Perl正则表达式。-v:打印**不匹配的行。正则表达式有:^:匹配行首。\d*:0或更多位数。[13579]:任意奇数位。\s:空白。
-P
-v
^
\d*
\s
xmd2e60i4#
使用任何awk:
$ awk -F_ '!(/^ID_/ && $2%2)' file ID_0112 xxx ID_0114 xxx xxxxxxxxxxxxxxxx
4条答案
按热度按时间56lgkhnf1#
您可以使用
sed
:在这里,正则表达式模式
/^ID_[^ ]*[13579] /
匹配一行,该行以ID_
开头,后跟0个或多个非空格字符,以[13579]
结尾,然后匹配空格。或者,使用
awk
,你可以这样做:pxyaymoc2#
在奇数之前可以有任何数字,奇数后面必须有一个空格。
fivyi3re3#
你可以像这样使用GNU
grep
:在这里,
grep
使用以下选项:-P
:使用Perl正则表达式。-v
:打印**不匹配的行。正则表达式有:
^
:匹配行首。\d*
:0或更多位数。[13579]
:任意奇数位。\s
:空白。xmd2e60i4#
使用任何awk: