我正在尝试重定向stderr到stdout然后pipe它,但我想我在这里缺少一些基本的东西。
要通过管道传输的命令和输出:
$ apt-cache show contractor
N: Can't select versions from package 'contractor' as it is purely virtual
N: No packages found
Run Code Online (Sandbox Code Playgroud)
Grep 不起作用 - 必须输出到stderr:
$ apt-cache show contractor |grep virtual
Run Code Online (Sandbox Code Playgroud)
好的,让我们重定向stderr到stdout:
$ apt-cache show contractor 2>&1 |grep virtual
Run Code Online (Sandbox Code Playgroud)
不,这不起作用,为什么?
确认命令正在使用哪个文件描述符:
$ apt-cache show contractor 1>t ;cat t
$ apt-cache show contractor 2>t ;cat t
N: Can't select versions from package 'contractor' as it is purely virtual …Run Code Online (Sandbox Code Playgroud) 我正在尝试输入一些只会返回由空行分隔的第一个“段落”或“部分”的内容。我以为我可以根据其他一些答案使用awk或sed获得一个范围,但它似乎不起作用。
$ cat txt
Package: plasma-desktop
Architecture: amd64
Version: 4:5.12.9.1-0ubuntu0.1
Supported: 3y
Package: plasma-desktop
Architecture: amd64
Version: 4:5.12.4-0ubuntu1
Supported: 3y
$ cat txt |awk '/^Package:/,/^$/'
Package: plasma-desktop
Architecture: amd64
Version: 4:5.12.9.1-0ubuntu0.1
Supported: 3y
Package: plasma-desktop
Architecture: amd64
Version: 4:5.12.4-0ubuntu1
Supported: 3y
Run Code Online (Sandbox Code Playgroud)
它不应该只返回第一个“部分”吗?(按照: Grep 从固定文本开始,直到第一个空行 和 https://www.unix.com/shell-programming-and-scripting/148692-awk-script-match-pattern-till-blank-line .html )
grep -ve ^$空行被删除,那么就没有特殊字符。如果我尝试提取不同的部分,我会从两个“部分”中获取部分:
$ cat txt |awk '/^Package:/,/^Version:/'
Package: plasma-desktop
Architecture: amd64
Version: 4:5.12.9.1-0ubuntu0.1
Package: plasma-desktop
Architecture: amd64
Version: 4:5.12.4-0ubuntu1
Run Code Online (Sandbox Code Playgroud)如果我使用sed -n '/^Package:/,/^$/p'或 …