如何从bash脚本中的命令输出中删除行

时间:2018-07-16 12:23:34

标签: bash

我正在尝试执行一条给出多行的命令;例如ldapwhoami,我想在bash脚本中创建它,该脚本仅显示最后一行而不是所有命令行。 我尝试了以下

#/bin/bash
$(ldapwhoami | sed 1d2d3d)

但是它似乎不起作用,任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

要仅打印最后一行,请使用tail

ldapwhoami | tail -n 1

要使用sed删除前三行,请将命令更改为:

ldapwhoami | sed '1d;2d;3d;'

注意分号和引号

awk

也可能
ldapwhoami | awk 'NR > 3'

以上假设所有输出均进入标准输出。在unix中,尽管每个进程都有两个输出流,但标准输出(用1表示-用于程序的输出)和标准错误(用2表示-用于任何诊断/错误消息)。这种分离的原因是,通常希望不要用诊断消息来“污染”输出,如果输出是由另一个脚本处理的。

因此,对于同时产生两个输出的命令,如果要捕获两个输出,则可以使用2>&1)将标准错误重定向到标准输出,如下所示:

ldapwhoami 2>&1 | tail -n 1

(对于awk和sed使用相同的语法)

在bash中,以上内容可以使用速记形式写为

ldapwhoami |& tail -n 1

如果您只需要标准输出,而不必担心标准错误,则可以将其重定向到/dev/null

ldapwhoami 2> /dev/null