【问题标题】:sed regex, work on substrings and not on whole linesed 正则表达式,处理子字符串而不是整行
【发布时间】:2010-10-13 00:02:58
【问题描述】:

假设有以下字符串:

commandone{alpha} commandtwo{beta} {gamma}commandthree commandtwo{delta}

我想获得:

commandone{alpha} beta {gamma}commandthree delta

好吧,我正在尝试使用正则表达式和 sed,我可以很容易地找到它是否存在我正在寻找的模式 /commandtwo{.*}/ 但不会删除 commandtwo 和以下两个括号。一种方法是仅使用子字符串“commandtwo{beta}”和“commandtwo{delta}”,但我不知道是否可以使用sed。

我正在寻找一个正则表达式来执行我所描述的操作。 提前感谢

【问题讨论】:

    标签: regex sed substring


    【解决方案1】:

    这似乎有效:

    sed 's/commandtwo{\([^}]*\)}/\1/g' inputfile
    

    例子:

    $ echo 'commandone{alpha} commandtwo{beta} {gamma}commandthree commandtwo{delta}'|sed 's/commandtwo{\([^}]*\)}/\1/g'
    commandone{alpha} beta {gamma}commandthree delta
    

    【讨论】:

      【解决方案2】:

      使用 awk

      $ s="commandone{alpha} commandtwo{beta} {gamma}commandthree commandtwo{delta}"
      $ echo "$s" | awk '{for(i=1;i<=NF;i++) if ($i~/commandtwo/){ gsub(/commandtwo|{|}/," ",$i)} }1'
      commandone{alpha}   beta  {gamma}commandthree   delta
      

      【讨论】:

        【解决方案3】:

        假设您想从代码中删除对 commandtwo 的所有引用(但不是参数),可能类似于 /commandtwo{(.*?)}/\1

        【讨论】:

          猜你喜欢
          • 2015-06-12
          • 1970-01-01
          • 2012-02-21
          • 1970-01-01
          • 2020-12-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多