只删除ONLY&只有2个大写字母

时间:2014-09-29 03:46:28

标签: bash awk sed grep

美好的一天,

我想知道如何用两个大写字母删除所有单词。

到目前为止,我已经完成了:

sed 's/[A-Z][A-Z]//g'

输入

AB, cd, EFG, hIJk, L, mnoPQ, rSt, UVxy

输出

, cd, EFG, hIJk, L, mnoPQ, rSt, UVxy

提前感谢任何线索

5 个答案:

答案 0 :(得分:3)

你快到了。只需在正则表达式的两边添加单词边界:

sed 's/\b[A-Z][A-Z]\b//g'

更新(由用户建议 CodeGnome

要在OS X等BSD系统上运行,您需要更改字边界并使用-E标志调用sed。例如:

sed -E 's/[[:<:]][A-Z][A-Z][[:>:]]//g'

答案 1 :(得分:2)

Ruby One-Liner

echo 'AB, cd, EFG, hIJk, L, mnoPQ, rSt, UVxy' |
ruby -ne 'puts $_.split(?,).
          map(&:strip).
          reject { |word| word =~ /\A\p{Upper}{2}\z/ }.
          join ", "'

结果

cd, EFG, hIJk, L, mnoPQ, rSt, UVxy

答案 2 :(得分:1)

怎么样:

echo "AB, cd, EFG, hIJk, L, mnoPQ, rSt, UVxy" | sed  's/^[A-Z][A-Z]\([^A-Z]\)/\1/' |sed 's/\([^A-Z]\)[A-Z][A-Z]$/\1/' |sed  's/\([a-z0-9]\)[A-Z][A-Z]\([a-z0-9]\)/\1\2/g'

输出

,cd,EFG,hk,L,mnoPQ,rSt,UVxy

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed 's/\<[A-Z][A-Z]\>//g' file

最有可能适用于sed的所有变体。

答案 4 :(得分:0)

echo "AB, cd, EFG, hIJk, L, mnoPQ, rSt, UVxy" | \
 sed 's/.*/ & /;s/\([^a-zA-Z]\)[A-Z]\{2\}\([^A-Za-z]\)/\1\2/g;s/.\(.*\)./\1/'

应该为posix版本(GNU sed上的--posix)做技巧