单行打印 "grep -o" 输出

printing "grep -o" output in single line

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

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

期望的输出:

HG

我可以使用以下命令廉价地实现它,但问题是字母的数量(在本例中为 3)可能是动态的。所以这种方法不能用。

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

你可以使用awk:

echo "Hello Guys!" | awk '{ gsub(/[^A-Z]/,"", [=10=]); print;}'
HG

还有 tr:

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

还有 sed :

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

您可以使用 perl 代替 grep

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

您可以使用此 sed 指令完成所有操作

echo "Hello Guys!" |sed 's/[^A-Z]//g'

更新

sed 命令分解:

s///sed的替代命令。它只是将第一个正则表达式(第一个和第二个斜线之间的那个)替换为第二个和第三个斜线之间的表达式。尾随的 g 代表全局,即对当前行中 RegEx 的每个匹配项执行此操作。没有 g 它会在第一次匹配后停止处理。 RegEx 本身匹配任何非大写字母,然后这些字母被替换为空,即有效删除。

您只需要删除换行符。您可以为此使用 tr

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

尽管如此,它也删除了最后一个换行符。