我有一份文件如下:
chs_de_le_q1gg
dsdas_212
sdasd_4567
weqwe_32323
dasds_232322
rr_F3r4
we_ff
asdasd_1_fff
sdfsd_tr
dsd_fr我需要删除以4-8个长度的数字结尾的行;也需要删除以ff和fr结尾的行。
我不能把数字和字母放在一起
cat test.txt | grep -vE "_[0-9]|[^0-9][0-9]{1,8}$\|_ff$|_fr$"有人能帮忙吗?
输出
dsdas_212
chs_de_le_q1gg
rr_F3r4
asdasd_1_fff
sdfsd_tr发布于 2022-11-02 17:29:49
您要寻找的扩展正则表达式:
_[[:digit:]]{4,8}$
_f[fr]$因此,使用grep:
grep -Ev -e '_[[:digit:]]{4,8}或者使用sed,您可以添加-i直接将更改应用到文件中。sed -E -e '/_[[:digit:]]{4,8}$/d' -e '/_f[fr]$/d' test.txt使用扩展正则表达式的-Egrep -e搜索所有给定模式-e将脚本添加到要执行的命令中[:digit:] a位数{4,8}从4到8$线路末端[fr],f或r如果您也需要添加正则表达式,则需要在正则表达式中添加-e。您可以按需要添加更多的-e,所以不要使正则表达式过于复杂。因此,在您的例子中,您可以为br、bd、rt添加:_br$
_bd$
_rt$ -e '_f[fr]或者使用sed,您可以添加D2直接将更改应用到文件中。A3F14H15使用扩展正则表达式的D6H27H18grep D9搜索所有给定模式H210H111D12将脚本添加到要执行的命令中H213H114D15 a位数H216H117D18从4到8H219H120D21线路末端H222H123D24,D25或D26H227F228如果您也需要添加正则表达式,则需要在正则表达式中添加D29。您可以按需要添加更多的D30,所以不要使正则表达式过于复杂。因此,在您的例子中,您可以为br、bd、rt添加:A31 test.txt或者使用sed,您可以添加D2直接将更改应用到文件中。
A3F14H15
使用扩展正则表达式的D6
H27H18
grep D9搜索所有给定模式
H210H111
D12将脚本添加到要执行的命令中
H213H114
D15 a位数
H216H117
D18从4到8
H219H120
D21线路末端
H222H123
D24,D25或D26
H227F228
如果您也需要添加正则表达式,则需要在正则表达式中添加D29。您可以按需要添加更多的D30,所以不要使正则表达式过于复杂。因此,在您的例子中,您可以为br、bd、rt添加:
A31
发布于 2022-11-02 17:20:40
.*(\d{4,8}$|f[fr]$)这表示“任意数目的字符(.*)在行尾($)后面跟着4-8位数字(\d{4-8),或在行(4)的末尾跟着f或r (f)中的一个”。
一种更简单和可扩展的方法:
.*(\d{4,8}|ff|fr|br|cu)$通常,可以在()中添加新的结尾,将它们放在()中,然后再用另一个“\”分隔。
我通过访问https://regex101.com/、放入样例文件并花了几分钟的时间来解决这个问题。这是一个很好的工具。
https://unix.stackexchange.com/questions/723431
复制相似问题