bash : 从一行中删除特定模式的字符

bash : Remove the specific pattern of characters from a line

文件a.txt的内容是:

10.39.105.16tcp(1234)   ABCDEF02  
10.49.105.13tcp(521)    ABCDEFV01  
10.19.105.12tcp(1241)   ABCDEFV01  
10.29.105.20tcp(1222)   ABCDEF03  
10.39.104.9tcp(131)     ABCDEF21  
10.49.104.34tcp(1512)   ABCDEF22  
10.89.104.120tcp(1384)  ABCDEF32     

如何实现如下输出:

10.39.105.10 ABCDEF02   
10.49.105.13 ABCDEFV01   
10.19.105.13 ABCDEFV01   
10.29.105.20 ABCDEF03   
10.39.104.1 ABCDEF21   
10.49.104.2 ABCDEF22   
10.89.104.130 ABCDEF32  

如何删除上述文件每一行中的模式 tcp( * )

你可以使用 sed:

sed 's/tcp([0-9]\+)\s\+/ /' a.txt

这也将删除 tcp(*) 之后的尾随 space,并将其替换为输出中显示的单个 space。

要更改实际文件(不仅仅是输出),请为 inplace 添加 -i 选项:

sed -i 's/tcp([0-9]\+)\s\+/ /' a.txt

根据您要实现的目标,答案可能是:

    awk '{sub(/tcp(.+)/,"",)}1' file

    10.39.105.16 ABCDEF02
    10.49.105.13 ABCDEFV01
    10.19.105.12 ABCDEFV01
    10.29.105.20 ABCDEF03
    10.39.104.9 ABCDEF21
    10.49.104.34 ABCDEF22
    10.89.104.120 ABCDEF32