Linux的使用sed - 删除词不与特定的字符开始(Linux sed - Delete wor

2019-10-21 07:57发布

如何消除由不以特定字符开头的单词sed

样品:

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

结果必然是;

"--foo -abc"

Answer 1:

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

第一个和最后一个-e命令,如果需要,只有当第一个字可能是错误的两种。



Answer 2:

GNU的sed与-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 


Answer 3:

您可以使用ssed启用PCRE正则表达式,然后你可以用这一个:

(?<!-)\b\w+

工作演示

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


文章来源: Linux sed - Delete words do not start with a specific character