1 awk
鉴于此文件,我想打印出该install:行之后的第一@ bash行.请参阅文件以获取完整输入,但这是一个示例
@ base-files ; few lines install: x86_64/release/base-files/base-files-4.2-3.tar.xz 46428 6372358800e589b ; couple of lines install: x86_64/release/base-files/base-files-4.1-1.tar.bz2 49519 f91ed6eab060c3 @ bash ; few lines install: x86_64/release/bash/bash-4.1.17-9.tar.xz 1107128 e49b8d67d59d8617dfa31c ; couple of lines install: x86_64/release/bash/bash-4.1.16-8.tar.xz 1106812 5aa652ddc0a5d65f4af1e2 source: x86_64/release/bash/bash-4.1.16-8-src.tar.xz 6614280 79bb3ddc67d8f0d3da6 @ bash-completion ; few lines install: x86_64/release/bash-completion/bash-completion-1.3-1.tar.bz2 117489 538 source: x86_64/release/bash-completion/bash-completion-1.3-1-src.tar.bz2 216503
输出应该是
install: x86_64/release/bash/bash-4.1.17-9.tar.xz 1107128 e49b8d67d59d8617dfa...
我有这个命令,但它会打印包含这两个的所有行.
awk '/@ bash$/,/install:/' setup.ini
Run Code Online (Sandbox Code Playgroud)
除了我创建这个答案的答案
awk '$1=="@" {c=$2} $1=="install:" && c=="bash" {print;exit}'
Run Code Online (Sandbox Code Playgroud)
您可以使用:
awk '/@ bash$/{p=1} p&&/install:/{print; exit}' setup.ini
install: x86_64/release/bash/bash-4.1.17-9.tar.xz 1107128 e49b8d67d59d8617dfa31c
Run Code Online (Sandbox Code Playgroud)