shell 在文件中搜索正则表达式模式

pbgvytdp  于 2023-01-31  发布在  Shell
关注(0)|答案(5)|浏览(154)

我有一个数据文件,格式如下

abc {u_bit_top/connect_down/u_FDIO[6]/u_latch}
ghi {u_bit_top/seq_connect/p_REDEIO[9]/ff_latch
def {u_bit_top/connect_up/shift_reg[7]

我希望在文件的每一行中搜索模式*bit_top*FDIO**bit_top*REDEIO*,如果找到模式,则删除整行。

def {u_bit_top/connect_up/shift_reg[7]

我使用sed像sed "/bit_top/d;/FDIO/d;/REDEIO/d;",但这删除了行有***bit_top***和***FDIO***和***REDEIO***分开。我如何才能搜索上述模式,并删除行包含它。 shell 或TCL任何将是有用的。

hof1towb

hof1towb1#

因为你标记了tcl

set fh [open "filename"]
set contents [split [read -nonewline $fh] \n]
close $fh
set filtered [lsearch -inline -not -regexp $contents {bit_top.*(FDIO|REDEIO)}]

导致

def {u_bit_top/connect_up/shift_reg[7]

lsearch documentation.
但实际上您只需要grep

grep -Ev 'bit_top.*(FDIO|REDEIO)' filename
3vpjnl9f

3vpjnl9f2#

你们一直很亲密!)

sed '/bit_top.*FDIO/d' input

只需向sed输入一个与所需内容相匹配的正则表达式...

70gysomp

70gysomp3#

使用sed

$ sed -E '/bit_top.*(REDE|FD)IO/d' input_file
def {u_bit_top/connect_up/shift_reg[7]
yfjy0ee7

yfjy0ee74#

您可以按照以下方式使用GNU AWK完成此任务,让file.txt内容

abc {u_bit_top/connect_down/u_FDIO[6]/u_latch}
ghi {u_bit_top/seq_connect/p_REDEIO[9]/ff_latch
def {u_bit_top/connect_up/shift_reg[7]

那么

awk '/bit_top/&&(/FDIO/||/REDEIO/){next}{print}' file.txt

给出输出

def {u_bit_top/connect_up/shift_reg[7]

说明:如果行包含bit_top AND(FDIO OR REDEIO),则转到next行,即跳过它。如果未发生这种情况,则仅编辑print行。

  • (在GNU Awk 5.0.1中测试)*
2w3rbyxf

2w3rbyxf5#

只需稍加修改,就可以在sed中实现复合模式(例如*bit_top*FDIO*)。
运算放大器电流sed的两个变化:

# daisy-chain the 2 requirements:

$ sed "/bit_top.*FDIO/d;/bit_top.*REDEIO/d" file
def {u_bit_top/connect_up/shift_reg[7]

# enable "-E"xtended regex support:

$ sed -E "/bit_top.*(FDIO|REDEIO)/d" file
def {u_bit_top/connect_up/shift_reg[7]

相关问题