删除字符串中除 'a' 'i' 和 'o' 之外的所有单字符单词

Remove all one character words in string EXCEPT 'a' 'i' and 'o'

我正在尝试解析一个删除了单引号的文件,留下一些随机的 ''s 之类的东西。

到目前为止我已经尝试过:

echo "a b c d e f g h i o omgifack" | grep -o '[^bcdefghjklmnpqrstuvBCDEFGHJKLMNPQRSTUV]\{2,\}' 
echo "a b c d e f g h i o omgifack" | tr -d '[bcdefghjklmnpqrstuvwxyzBCDEFGHJKLMNPQRSTUVWXYZ]'

我的示例基于:

echo "a b c d e f g h i o omgifack" | grep -o '[a-z]\{2,\}'

期望的输出:

>a i o omgifack

我似乎无法弄明白,但我确信我遗漏了一些明显的东西。开放使用 awk、sed、tr、grep 的解决方案……任何有效的方法。谢谢!

我可能会使用类似

的东西
echo "a b c d e f g h i o omgifack" | grep -wo '[[:alpha:]]\{2,\}\|[AIOaio]'
a
i
o
omgifack

这将隔离所有长度超过两个字母(即 [[:alpha:]]\{2,\} 部分)或 [AIOaio].[=18 之一的整个单词(因为 -w) =]

请注意,如果文本包含变音符号或重音字符(例如 äéß 等),[[:alpha:]] 会包含那些当且仅当 grep 是运行 在将它们识别为字母表一部分的语言环境下。

这可能适合您 (GNU sed):

sed 's/\b[^aio ]\b \?//Ig' file

删除任何非 aiu(大写或小写)后跟可能的 space.

的单例字符