我想获取 tok98 和 5678 之间的文本并将其转储到文件中。
如果 tok98 和 5678 在同一条线上,我可以使用它
sed -n 's/.*\(tok98\)\(.*\)\(5678\).*/\2/p' testfile.txt > text.dmp
Run Code Online (Sandbox Code Playgroud)
但是当标记垂直间隔时它不起作用,我如何重写这个 sed 以在这里工作
$ cat testfile.txt
do with > 9
tok98
fdf df s df sd f sd v
dvsdv dvf sd vs vs dv sdfsd
2323 2323 232 {}
sfdf sd f s df s df sf
5678
no way = true + 50
$
Run Code Online (Sandbox Code Playgroud)
您可以在 sed 中使用 /START/,/STOP/模式范围
sed -n '/tok98/,/5678/p' file
Run Code Online (Sandbox Code Playgroud)
/START/ 和 /STOP/ 也可以是 RE
sed -n '/^tok98/,/^5678/p' file
Run Code Online (Sandbox Code Playgroud)
将在开始tok98和的行之间打印,5678除非行以这些字符串开头,否则不会开始或停止。
如果你想排除 /START/ 和 /STOP/ 那么这应该有效
sed -n '/^tok98/,/^5678/ {/^tok98/b;/^5678/b;p}' file
Run Code Online (Sandbox Code Playgroud)
sed 默认情况下不处理多行,但这可以使用以下技巧解决:
$ cat testfile.txt | tr '\n' ',' | sed -n 's/.*\(tok98\)\(.*\)\(5678\).*/\2/p' | tr ',' '\n' > text.dmp
Run Code Online (Sandbox Code Playgroud)
您只需要将换行符转换为\n其他字符,,然后在完成后将它们转换回 \n sed。您需要确保输入的文件没有任何逗号。
| 归档时间: |
|
| 查看次数: |
370 次 |
| 最近记录: |