【问题标题】:How to use sed to print the match patten如何使用 sed 打印匹配模式
【发布时间】:2023-04-03 14:23:01
【问题描述】:

我想用 sed 打印匹配模式,例如:
我想获得 uuid,所以我可以使用它:
blkid $1 | grep -o -E "[a-f0-9-]{8}([a-f0-9-]{4}){3}[a-f0-9-]{12}"
我如何使用 sed 或 awk 做到这一点?

【问题讨论】:

    标签: regex linux bash sed awk


    【解决方案1】:

    sed

    sed -n 's/pattern/&/p' file
    

    -n 是告诉sed 保持安静,& 是匹配字符串,p 是打印。

    awk

    awk '/pattern/' file
    

    在您的情况下,将pattern 更改为[a-f0-9-]{8}([a-f0-9-]{4}){3}[a-f0-9-]{12},可能需要使用\ 转义[

    【讨论】:

    • 模式错误。右侧:[a-f0-9-]{8}-([a-f0-9-]{4}-){3}[a-f0-9-]{12}
    • sed -n '/pattern/p' 完成这项工作 - 它执行“打印”而不是“替换为自己并打印”
    【解决方案2】:

    你想要这个吗?

    awk:

    kent$  echo '/dev/sda6: UUID="c6e3ce88-f44e-4261-9178-042db8423081" TYPE="ext3"'|awk -F'UUID="|" ' '{print $2}'
    c6e3ce88-f44e-4261-9178-042db8423081
    

    sed:

    kent$  echo '/dev/sda6: UUID="c6e3ce88-f44e-4261-9178-042db8423081" TYPE="ext3"'|sed -r 's/.*UUID="([^"]*).*"/\1/g'
    c6e3ce88-f44e-4261-9178-042db8423081
    

    【讨论】:

    • 谢谢,这就是我想要的
    【解决方案3】:
    blkid | sed -nr 's/^.+UUID="(.*?)" .+$/\1/p'
    

    【讨论】:

      【解决方案4】:

      Awk 和 sed 解决方案:

      $ blkid /dev/sda2 | sed -e 's/.*UUID="\([0-9A-F]*\).*/\1/'
      16A42BA2A42B837B
      
      $ blkid /dev/sda2 | awk '{split($2, tmp, "=") ; print tmp[2]}'
      "16A42BA2A42B837B"
      
      $ blkid /dev/sda2 | awk -F'UUID="|"' '{print $2}'
      16A42BA2A42B837B
      

      【讨论】:

        【解决方案5】:

        使用 sed:

        sed -n 's/.*\(Pattern\).*/\1/p'
        

        测试

        echo " 开始" 开始 echo " 开始" | sed -n 's/.(开始)./\1/p' 开始

        【讨论】:

          【解决方案6】:

          sed 有一个很好的列表 http://sed.sourceforge.net/sed1line.txt。它提出了两种模拟grep的方法:

          sed -n '/regexp/p'           # method 1
          sed '/regexp/!d'             # method 2
          

          /regexp/p 打印匹配/regexp/ 的行。 (需要-n 标志来防止sed 打印/重新打印每个已处理的行。)

          /regexp/!d 删除 匹配/regexp/ 的每一行,因此只打印匹配的行。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-07-20
            • 2013-07-28
            • 2023-03-25
            • 2017-12-01
            • 2020-08-16
            • 2021-09-10
            • 1970-01-01
            相关资源
            最近更新 更多