保留第一行的同时进行 Grep 操作

kur*_*nue 7 linux bash shell grep pipe

我试图理解这种奇怪的行为。基本上,我试图 grep 命令的输出,同时仍然保留第一行/标题。我在这里先向您的帮助表示感谢。

成功案例

ps -ef | { head -1; grep bash; }
Run Code Online (Sandbox Code Playgroud)

输出:

UID        PID  PPID  C STIME TTY          TIME CMD
username  1008     1  0 Jan21 tty1     00:00:00 -bash
username  1173  1008  0 Jan21 tty1     00:00:00 -bash
Run Code Online (Sandbox Code Playgroud)

失败案例

 ls -tlrh / | { head -1; grep tmp; }
Run Code Online (Sandbox Code Playgroud)

输出:

total 100K
Run Code Online (Sandbox Code Playgroud)

(即:它忽略该/tmp文件夹)

Mar*_*ell 6

@Jotne的答案更好,但有时你可以使用grep -E如果你知道第一行中的某些内容,那么你可以搜索该内容或你想要的其他内容,就像这样用管道符号来表达交替:

ps -ef | grep -E "UID|bash"
Run Code Online (Sandbox Code Playgroud)

输出

UID   PID  PPID   C STIME   TTY           TIME CMD
502   510   509   0  8:01am ttys000    0:00.08 -bash
502 48806   510   0 10:18am ttys000    0:00.00 grep -E UID|bash
Run Code Online (Sandbox Code Playgroud)


Jot*_*tne 4

尝试使用awk,eks:

ls -tlrh / | awk 'NR==1 || /tmp/'
Run Code Online (Sandbox Code Playgroud)

这将打印行号1或行tmp

NR==1; 打印行号1
/tmp/打印包含以下内容的所有行tmp