单行打印“grep -o”输出

如何在单行中打印grep -o输出? 我正在尝试打印:

 $ echo "Hello Guys!" |grep -E '[AZ]' Hello Guys! $ echo "Hello Guys!" |grep -Eo '[AZ]' <----Multiple lines H G $ echo "Hello Guys!" |grep -Eo '[AZ]' 

期望的输出:

 HG 

我可以使用下面的命令便宜地实现它,但问题是,字母数量(在这种情况下是3)可能是dynamic的。 所以这个方法不能使用。

 echo "HEllo Guys!" |grep -oE '[AZ]' |xargs -L3 |sed 's/ //g' HEG 

你可以用这个sed指令来完成这一切

 echo "Hello Guys!" |sed 's/[^AZ]//g' 

UPDATE

sed命令的细分:

s ///sed的替代命令。 它只是用斜杠2和3之间的表达式替换第一个RegEx(第一个和第二个斜杠之间的那个)。 后面的g表示全局,即对当前行中RegEx的每一个匹配项执行此操作。 如果没有g ,那么在第一场比赛之后就会停止处理。 RegEx本身与任何非大写字母匹配,然后这些字母被替换为无,即被有效删除。

你可以使用awk

 echo "Hello Guys!" | awk '{ gsub(/[^AZ]/,"", $0); print;}' HG 

还有tr

 echo "Hello Guys!" | tr -cd [:upper:] HG 

还用sed

 echo "Hello Guys!" | sed 's/[^\[:upper:]]//g' HG 

你只需要删除换行符。 你可以用tr来表示:

 echo "HEllo Guys!" |grep -Eo '[AZ]' |tr -d '\n' HEG 

虽然,它也削减了最后一个换行符。

你可以使用Perl而不是grep

 echo 'HEllo Guys!' | perl -lne 'print /([AZ])/g' HEG