删除字符串中的所有一个字符单词除了'a''''和'o'

时间:2018-02-11 23:35:00

标签: linux awk sed grep tr

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

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

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打开解决方案......任何有效的方法。谢谢!

3 个答案:

答案 0 :(得分:2)

我可能会使用像

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

这将隔离所有整个单词(因为-w)长度超过两个字母([[:alpha:]]\{2,\}部分)或[AIOaio]之一。< / p>

请注意,如果文字包含变音符号或重音字符(例如äéß等),[[:alpha:]]确实包含iff grep在其下运行一个区域设置,将它们识别为字母表的一部分。

答案 1 :(得分:0)

如下的简单awk可以帮助您:

echo "a b c d e f g h i o omgifack" |  awk '{for(i=1;i<=NF;i++){if($i ~ /[aioAIO]/){print $i}}}'

输出如下:

a
i
o
omgifack

说明: 启动for循环,该循环从名为i的变量的值开始,从1到变量值{{1 (一行中的字段数,NF&#39; s开箱即用的变量)。然后检查条件,如果变量i的awk值(换言之,特定字段)包含小$i ~ /[aioAIO]/ OR大写aio,则根据OP&#39打印该特定字段的值请求。

答案 2 :(得分:0)

这可能适合你(GNU sed):

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

删除任何不是aiu(大写或小写)的单个字符,后跟可能的空格。

相关问题