我想抓住tok98和5678之间的文本并将其转储到文件中。
如果tok98和5678在同一行我可以使用这个
sed -n 's/.*\(tok98\)\(.*\)\(5678\).*/\2/p' testfile.txt > text.dmp
但是当令牌垂直间隔不工作,我怎么能重写这个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 fs df s df sf 5678 no way = true + 50 $
您可以在sed中使用/ START /,/ STOP / pattern范围
sed -n '/tok98/,/5678/p' file
/ START /和/ STOP /也可以是RE
sed -n '/^tok98/,/^5678/p' file
会在从tok98和5678开始的行之间打印,除非行以这些string开头,否则不会启动或停止。
如果你想排除/开始/和/停止/那么这应该工作
sed -n '/^tok98/,/^5678/ {/^tok98/b;/^5678/b;p}' file
默认情况下sed不会处理多行,但是可以使用如下的技巧来解决:
$ cat testfile.txt | tr '\n' ',' | sed -n 's/.*\(tok98\)\(.*\)\(5678\).*/\2/p' | tr ',' '\n' > text.dmp
您只需要将换行符转换为其他字符,然后使用sed将其转换回\ n。 你需要确保你input的文件没有任何逗号。