![在文本文件中,如何在 Unix 上使用 sed 分隔由特定文本模式边框的文本的多个部分?](https://linux22.com/image/84763/%E5%9C%A8%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E4%B8%AD%EF%BC%8C%E5%A6%82%E4%BD%95%E5%9C%A8%20Unix%20%E4%B8%8A%E4%BD%BF%E7%94%A8%20sed%20%E5%88%86%E9%9A%94%E7%94%B1%E7%89%B9%E5%AE%9A%E6%96%87%E6%9C%AC%E6%A8%A1%E5%BC%8F%E8%BE%B9%E6%A1%86%E7%9A%84%E6%96%87%E6%9C%AC%E7%9A%84%E5%A4%9A%E4%B8%AA%E9%83%A8%E5%88%86%EF%BC%9F.png)
我用来sed -n START_LINE,FINISH_LINEp filename > newfile
从文本文件中提取指定范围的文本,例如sed -n 45,50p datafile > newfile
.
如何使用它来提取始终由相同文本模式边框的多个文本部分?例如,我想要提取的文本始终从 39 行开始,Subject:?????
并在 之前立即结束Start Date: ??/??/??
。
答案1
虽然这本身并不能回答您的问题,但awk
有一个优雅的解决方案。
$ awk '
# Set start variable
/Subject/ { start=NR + 39; }
# Disable print condition below
/Start Date/ { start=""; next; }
# Print while line is greater than start
NR > start && start
' someFile.txt