Regular-Expression

從文件中刪除數字和字元

  • November 2, 2022

我有一個如下文件:

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

您正在尋找的擴展正則表達式:

_[[:digit:]]{4,8}$
_f[fr]$

所以使用 grep :

grep -Ev -e '_[[:digit:]]{4,8}$' -e '_f[fr]$' test.txt

或者使用 sed,您可以添加-i以將更改直接應用到文件

sed -E -e '/_[[:digit:]]{4,8}$/d' -e '/_f[fr]$/d' test.txt
  • -E使用擴展正則表達式
  • grep-e搜尋所有給定的模式
  • sed-e將腳本添加到要執行的命令中
  • [:digit:]一個數字
  • {4,8}從 4 到 8
  • $行結束
  • [fr]要麼f_r

如果您還需要添加正則表達式,則需要添加-e正則表達式。您可以根據需要添加很多內容,-e因此不要使正則表達式過於復雜。因此,在您的情況下,您可以添加 br, bd, rt :

_br$
_bd$
_rt$

引用自:https://unix.stackexchange.com/questions/723431