我正在尝试解析删除了单引号的文件,留下一些随机的东西。等等。
到目前为止,我已经尝试过:
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打开解决方案......任何有效的方法。谢谢!
答案 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
删除任何不是a
,i
或u
(大写或小写)的单个字符,后跟可能的空格。