【问题标题】:bash : Remove the specific pattern of characters from a linebash :从一行中删除特定的字符模式
【发布时间】:2016-12-19 00:16:16
【问题描述】:

文件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(*)模式?

【问题讨论】:

  • 猫 a.txt |剪切-d$'\t' -f1 | cut -d$'t' -f1 > 1 和 cat a.txt |剪切 -d$'\t' -f2 > 2 并粘贴 -d$"\t" 1 2 .. 它有效,但我只是想在单个命令中实现它。
  • 在您的示例中,tcp 前面的最后一个数字也发生了变化,对吗??

标签: bash awk sed grep tr


【解决方案1】:

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

    awk '{sub(/tcp(.+)/,"",$1)}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

【讨论】:

    【解决方案2】:

    你可以使用 sed:

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

    这也将去掉 tcp(*) 之后的尾随空格,并将其替换为输出中出现的单个空格。

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

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

    【讨论】:

    • 我已经清楚地提到了我在回复您的评论时的尝试。你可以看到。
    猜你喜欢
    • 2019-11-05
    • 1970-01-01
    • 2011-08-21
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    相关资源
    最近更新 更多