美好的一天,
我想知道如何用两个大写字母删除所有单词。
到目前为止,我已经完成了:
sed 's/[A-Z][A-Z]//g'
输入
AB, cd, EFG, hIJk, L, mnoPQ, rSt, UVxy
输出
, cd, EFG, hIJk, L, mnoPQ, rSt, UVxy
提前感谢任何线索
答案 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)
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
)做技巧