首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从文件中删除数字和字符

从文件中删除数字和字符
EN

Unix & Linux用户
提问于 2022-11-02 17:07:09
回答 2查看 438关注 0票数 -1

我有一份文件如下:

代码语言:javascript
复制
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结尾的行。

我不能把数字和字母放在一起

代码语言:javascript
复制
cat test.txt |  grep  -vE "_[0-9]|[^0-9][0-9]{1,8}$\|_ff$|_fr$"

有人能帮忙吗?

输出

代码语言:javascript
复制
dsdas_212
chs_de_le_q1gg
rr_F3r4
asdasd_1_fff
sdfsd_tr
EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2022-11-02 17:29:49

您要寻找的扩展正则表达式:

代码语言:javascript
复制
_[[:digit:]]{4,8}$
_f[fr]$

因此,使用grep:

代码语言:javascript
复制
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

D24D25D26

H227F228

如果您也需要添加正则表达式,则需要在正则表达式中添加D29。您可以按需要添加更多的D30,所以不要使正则表达式过于复杂。因此,在您的例子中,您可以为br、bd、rt添加:

A31

票数 1
EN

Unix & Linux用户

发布于 2022-11-02 17:20:40

代码语言:javascript
复制
.*(\d{4,8}$|f[fr]$)

这表示“任意数目的字符(.*)在行尾($)后面跟着4-8位数字(\d{4-8),或在行(4)的末尾跟着f或r (f)中的一个”。

一种更简单和可扩展的方法:

代码语言:javascript
复制
.*(\d{4,8}|ff|fr|br|cu)$

通常,可以在()中添加新的结尾,将它们放在()中,然后再用另一个“\”分隔。

我通过访问https://regex101.com/、放入样例文件并花了几分钟的时间来解决这个问题。这是一个很好的工具。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/723431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档