单行打印 "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
尽管如此,它也删除了最后一个换行符。
如何在一行中打印 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
尽管如此,它也删除了最后一个换行符。