Grep 打印输入的其余部分以及匹配行

Grep 打印输入的其余部分以及匹配行,grep,Grep,我是linux新手,正在试验基本的终端命令。我发现我可以使用compgen-u列出所有用户,但是如果我只想显示底线输出呢? 好的,假设compgen-u的输出如下: extra extra extra extra extra extra extra extra extra John William Kate Harold 我只能使用grep查找单个文本(例如,compgen-u | grep John)。但是,如果我想使用grep来显示John以及它后面的所有剩余条目,该怎么办?sed或awk

我是linux新手,正在试验基本的终端命令。我发现我可以使用
compgen-u
列出所有用户,但是如果我只想显示底线输出呢? 好的,假设compgen-u的输出如下:

extra
extra
extra
extra
extra
extra
extra
extra
extra
John
William
Kate
Harold

我只能使用grep查找单个文本(例如,
compgen-u | grep John
)。但是,如果我想使用grep来显示John以及它后面的所有剩余条目,该怎么办?

sed
awk
解决方案会更简单,但是如果您只能使用
grep
,那么在上下文之后的
--after context
(或
-A
)选项可能会执行以下操作:

grep -A 5 John file

缺点是您需要知道匹配后要显示的行数(或者对文件的其余部分使用任意大的数字)。

compgen-u | grep-A$(compgen-u | wc-l)John

说明:

From man grep

       -A NUM, --after-context=NUM
                  Print NUM lines of trailing context after matching lines.  Places a line containing a group separator (described under --group-separator) between
                  contiguous groups of matches.

您可以使用以下一个衬里:

n=$( compgen -u | grep -n John | head -1 | cut -d ":" -f 1 ) && compgen -u | tail -n +$n
这将找出John第一次出现的行号,并打印从该行开始的所有内容

n=$( compgen -u | grep -n John | head -1 | cut -d ":" -f 1 ) && compgen -u | tail -n +$n