regex sed删除带有图案且以奇数结尾的行

mpgws1up  于 2023-10-22  发布在  其他
关注(0)|答案(4)|浏览(97)

在下面的sed中,我试图删除所有包含ID_且以奇数结尾的行。这两个命令都会执行,但返回的文件不变。

文件

ID_0111 xxx
ID_0112 xxx
ID_0113 xxx
ID_0114 xxx
xxxxxxxxxxxxxxxx

所需

ID_0112 xxx
ID_0114 xxx
xxxxxxxxxxxxxxxx

sed

sed '/ID_[13579]/d' file.txt
sed 's|ID_[13579]$| |g'
56lgkhnf

56lgkhnf1#

您可以使用sed

sed '/^ID_[^ ]*[13579] /d' file

ID_0112 xxx
ID_0114 xxx
xxxxxxxxxxxxxxxx

在这里,正则表达式模式/^ID_[^ ]*[13579] /匹配一行,该行以ID_开头,后跟0个或多个非空格字符,以[13579]结尾,然后匹配空格。
或者,使用awk,你可以这样做:

awk '$1 !~ /^ID_/ || $1 ~ /[02468]$/' file

ID_0112 xxx
ID_0114 xxx
xxxxxxxxxxxxxxxx
pxyaymoc

pxyaymoc2#

在奇数之前可以有任何数字,奇数后面必须有一个空格。

sed '/ID_[0-9]*[13579] /d'
fivyi3re

fivyi3re3#

你可以像这样使用GNU grep

grep -P -v '^ID_\d*[13579]\s' in_file > out_file

在这里,grep使用以下选项:
-P:使用Perl正则表达式。
-v:打印**不匹配的行。
正则表达式有:
^:匹配行首。
\d*:0或更多位数。
[13579]:任意奇数位。
\s:空白。

xmd2e60i

xmd2e60i4#

使用任何awk:

$ awk -F_ '!(/^ID_/ && $2%2)' file
ID_0112 xxx
ID_0114 xxx
xxxxxxxxxxxxxxxx

相关问题