我的文件* .txt包含内容
blah blah. Management blah stuff I don't want blah Management 09/10/15 stuff I do want Overview
使用
处理单个文件时sed -nr '/Management.[0-9]/{:a;n;/Overview/b;p;ba}' 1.txt
我得到了
stuff I want
使用相同的命令处理多个文件时
sed -nr '/Management.[0-9]/{:a;n;/Overview/b;p;ba}' *.txt
我得到了
stuff I don't want blah Management 09/10/15 stuff I do want
是什么给出的?我需要像
这样的东西/Management[[:space:]][0-9]
但是不能理解如何将其纳入SED。 我想我昨晚有这个,然后关闭而没有保存。 (但是,我没有仔细检查数据,可能会错过一些东西。尝试从bash历史重建,这使我在这里)。
这些文本文件是从PDF转换而来的,空格可能不会中断。
答案 0 :(得分:1)
此/Management*[0-9]/
是一个shell glob模式,其中*
表示“零个或多个任何字符”。有关详细信息,请参阅https://www.gnu.org/software/bash/manual/bashref.html#Pattern-Matching
您需要sed正则表达式,记录在https://www.gnu.org/software/sed/manual/sed.html#Regular-Expressions
/Management \+[0-9]/
这就是管理这个词,后跟一个或多个空格,后跟一个数字。
答案 1 :(得分:0)
如果您希望材料位于包含Management
的行与至少一位数之间,而下一行包含Overview
,则您要求sed
生成该材料:
sed -n -e '/Management.*[0-9]/,/Overview/ { /Overview/d; p; }'
给定文件data
包含:
blah blah. Management blah
stuff I don't want blah
Management 09/10/15
stuff I do want
Overview
Not wanted
Please ignore
我得到的输出是:
$ sed -n -e '/Management.*[0-9]/,/Overview/ { /Overview/d; p; }' data data
Management 09/10/15
stuff I do want
Management 09/10/15
stuff I do want
$