我正在尝试编写一个bash函数来返回一个特定的管道输出行.目前,完整命令如下所示:
mdfind 'my_search_string' | sed "2q;d"
Run Code Online (Sandbox Code Playgroud)
这将返回mdfind-command的第二行输出.
我试图sed "$1q;d"变成一个被指定为别名的函数.
如何处理管道输入?
要返回第二行输出,请执行以下操作:
... | sed -ne 2p
Run Code Online (Sandbox Code Playgroud)
并将其用作功能:
function print_2nd_line {
sed -ne 2p
}
mdfind 'my_search_string' | print_2nd_line
Run Code Online (Sandbox Code Playgroud)
您也可以根据需要选择较短的名称p2.
该功能也可以自定义为能够从指定的文件打印第二行,如:
function print_2nd_line {
sed -ne 2p -- "$@"
}
print_2nd_line file
... | print_2nd_line ## Still could be used like this.
Run Code Online (Sandbox Code Playgroud)
顺便说一下,更高效的版本将是
sed -ne '2{p;q}'
Run Code Online (Sandbox Code Playgroud)
UPDATE
正如Charles Duffy所建议的那样,您也可以将此格式用于POSIX兼容性.实际上它也与基于原始System V sh的所有外壳兼容.
print_2nd_line() {
sed -ne '2{p;q}' -- "$@"
}
Run Code Online (Sandbox Code Playgroud)
此外,如果您想将自定义行号传递给您的函数,您可以:
print_2nd_line() {
N=$1; shift
sed -ne "${N}{p;q}" -- "$@"
}
Run Code Online (Sandbox Code Playgroud)
在哪里可以运行它:
... | print_2nd_line 2 ## Still could be used like this.
Run Code Online (Sandbox Code Playgroud)
要么
print_2nd_line 2 file
Run Code Online (Sandbox Code Playgroud)