Linux sed - 删除单词不以特定字符开头

时间:2014-11-28 23:49:32

标签: regex linux bash sed

如何删除sed之后没有以特定字符开头的字词?

样品:

echo "--foo imhere -abc anotherone" | sed ...

结果必须是;

"--foo -abc"

3 个答案:

答案 0 :(得分:2)

echo "--foo imhere -abc anotherone" |\
sed -e 's/^/ /g' -e 's/ [^-][^ ]*//g' -e 's/^ *//g'

只有当第一个单词出错时才需要第一个和最后一个-e命令。

答案 1 :(得分:1)

gnu sed with -r

kent$ echo "--foo imhere -abc anotherone" | sed -r 's/^|\s[^-]\S*//g' 
--foo -abc

但是我更喜欢awk来解决它,更直接:

awk '{for(i=1;i<=NF;i++)$i=($i~/^-/?$i:"")}7' 

输出:

--foo  -abc 

答案 2 :(得分:0)

您可以使用ssed启用PCRE正则表达式,然后您可以使用此功能:

(?<!-)\b\w+

<强> Working demo

enter image description here

echo "--foo imhere -abc anotherone" | ssed 's/(?<!-)\b\w+//'
相关问题