sed正则表达式,在子串上工作而不是整行

时间:2010-10-12 15:44:57

标签: regex sed substring

假设有以下字符串:

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

我想要获得:

commandone{alpha} beta {gamma}commandthree delta
好吧,我正在用正则表达式和sed进行攻击,我很容易找到它是否存在我寻找的模式 /commandtwo {。*} /但没有删除commandtwo和以下两个brakets。一种方法是仅使用子串“ commandtwo {beta} ”和“ commandtwo {delta} ”,但我不知道即使可能或未使用SED。

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

3 个答案:

答案 0 :(得分:2)

这似乎有效:

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

答案 1 :(得分:0)

使用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

答案 2 :(得分:0)

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