Spi*_*ike 45 grep sed awk text-processing
我有一个包含以下内容的文件:
zdk
aaa
b12
cdn
dke
kdn
Run Code Online (Sandbox Code Playgroud)
输入 1:aaa和cdn
输出 1:
aaa
b12
cdn
Run Code Online (Sandbox Code Playgroud)
输入 2:zdk和dke
输出 2:
zdk
aaa
b12
cdn
dke
Run Code Online (Sandbox Code Playgroud)
我可以使用以下命令来实现:
grep -a aaa -A2 file # Output 1
grep -a aaa -A4 file # Output 2
Run Code Online (Sandbox Code Playgroud)
但是在文件中我不知道结束字符串模式的确切出现(位置)是什么(文件有 20000 行)
我怎样才能做到这一点?
fed*_*qui 54
grep不会在这里帮助你。sed使用范围表达式可以更好地完成这项工作:
$ sed -n '/aaa/,/cdn/p' file
aaa
b12
cdn
$ sed -n '/zdk/,/dke/p' file
zdk
aaa
b12
cdn
dke
Run Code Online (Sandbox Code Playgroud)
sed -n禁止自动打印,以便在明确要求时打印行。当范围/aaa/,/cdn/发生时,就会发生这种情况。
这些范围表达式也可在 中使用awk,您可以在其中说:
awk '/zdk/,/dke/' file
Run Code Online (Sandbox Code Playgroud)
当然,所有这些条件都可以扩展为更严格的正则表达式,例如sed -n '/^aaa$/,/^cdn$/p' file检查行是否恰好包含在aaaand 上cdn,仅此而已。