【问题标题】:How to delete text until symbol is found on the left of the match including the symbol and until the symbol is found at the right如何删除文本,直到在匹配的左侧找到符号,包括符号,直到在右侧找到符号
【发布时间】:2022-01-17 10:58:53
【问题描述】:

我想清除此示例引号中的第一个字符串:

set dstaddr "somename 10.108.41.90" "somename 10.108.148.53" 

我想要以下结果:

set dstaddr "somename 10.108.148.53" 

您能否建议如何在 bash 中实现它? 我不仅对删除引号中的第一个匹配项感兴趣,而且对从 10.108.41.0/24 或在第三个八位字节中包含 41 及其名称的匹配 IP 地址范围以及删除它们感兴趣。

逻辑应该是: 如果您在子网 10.108.41.0/24 中找到主机,请使用 Okey 脚本将它们连同它们的名称一起从字符串中删除,但不要接触其他对象。

【问题讨论】:

    标签: python string bash


    【解决方案1】:

    Perl:

    echo 'set dstaddr "somename 10.108.41.90" "somename 10.108.148.53"' \
    | perl -pe 's/\b(\S+)\b.*?\1/$1/'
    
    set dstaddr "somename 10.108.148.53"
    
    • \b(\S+)\b 找到一个单词并记住它
    • .*?\1 找到一些字符后跟该单词
    • s/pattern/$1/ 将模式替换为捕获的单词

    【讨论】:

    • 您确实知道(根据您的“分数”,我会这么说)SO 的政策是不想成为拨号编码器网站?
    • 你好杰克曼,你的建议也只适用于第一场比赛。如果我添加额外的“somename ”它不起作用
    • 您没有在问题中指定。但是将.*? 更改为.* 以使正则表达式匹配更加贪婪。
    【解决方案2】:

    这个呢:

    awk '{print $1 " " $2 " " $5 " " $6}' test.txt
    

    我只是将空格用作awk 命令的分隔符。这显然只有在 somename 不包含任何空格字符时才有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-07
      • 2012-02-25
      • 2013-02-15
      • 2014-06-17
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多