提取具有两种模式的数据

时间:2013-05-14 10:56:36

标签: regex sed awk grep

我需要一些关于我的任务的帮助,方案:我们有数据文件 - 例如公交公司信息:(位置ID和公司办公室/仓库)

id^office
B003^Red Bus Off BSR - GPO
B015^Red Bus Depot BSR
B003^Red Bus Off BSR - Main Stand
B027^MCD Bus Depot LLR
B047^MCD Bus Depot BSR 

....等

我需要在办公室名称中提取同时具有“红色总线”(公司名称)和“仓库”的数据,而不是其他.....因此仅在输出文件中      B015 ^ Red Bus Depot BSR

我目前正在尝试egrep“pat1 | pat2”,但这适用于OR条件,我也尝试过if-然后grep / sed - 这个剂量可以很好地满足要求,因为我得到满足任何一个的结果模式,而不是两者!

感谢。

3 个答案:

答案 0 :(得分:3)

您可以使用AND运算符与awk一起使用逻辑&&,如下所示:

$ awk '/Red Bus/&&/Depot/' file
B015^Red Bus Depot BSR

但是你的数据显示没有理由不这样做:

$ fgrep 'Red Bus Depot' file
B015^Red Bus Depot BSR

注意:fgrep只是固定字符串grep(即grep -F),因为不需要regexp。

如果您不能保证只有空格会将Red BusDepot分开,但可以保证订单:

$ grep 'Red Bus.*Depot' file
B015^Red Bus Depot BSR

最后,如果您不能保证订单:

$ egrep 'Red Bus.*Depot|Depot.*Red Bus' file
B015^Red Bus Depot BSR

答案 1 :(得分:1)

sed -n '/Red Bus/{/Depot/p}' file

答案 2 :(得分:1)

尝试滚边。 grep "Red Bus" <File> |grep Depot基本上你为所有“红色巴士”而grep,在这些结果中,搜索哪个有“Depot”,这有效地创造了一个和条件