有没有办法将以下逻辑放入grep命令?

时间:2011-09-12 01:07:25

标签: linux shell text csv grep

例如,假设我有以下数据

ABC,3,4
,,ExtraInfo
,,MoreInfo
XYZ,6,7
,,XyzInfo
,,MoreXyz
ABC,1,2
,,ABCInfo
,,MoreABC

获取grep以提取ABC行是微不足道的。但是,如果我还想抓住以下行来产生这个输出

ABC,3,4
,,ExtraInfo
,,MoreInfo
ABC,1,2
,,ABCInfo
,,MoreABC

可以使用grep和标准shell脚本来完成吗?

编辑:只是为了澄清两者之间可能存在可变数量的行。逻辑是在CSV的第一列为空时继续打印。

3 个答案:

答案 0 :(得分:5)

grep -A 2 {Your regex}将在找到的字符串后输出两行。

更新的 由于您指定它可以是任意数量的行,因此这是不可能的,因为grep侧重于单行匹配,请参阅以下问题:

答案 1 :(得分:2)

你可以使用这个,虽然由于管道末端的grep导致任何不以'A'或','开头的东西都有点hackity:

$ sed -n '/^ABC/,/^[^,]/p' yourfile.txt| grep -v '^[^A,]'

编辑:一种不那么黑客的方式是使用awk:

$ awk '/^ABC/ { want = 1 } !/^ABC/ && !/^,/ { want = 0 } { if (want) print }' f.txt

如果你大声读出大括号中的图案和东西,你就能理解它的作用。

答案 2 :(得分:1)

该联机帮助页有对选项的说明,您希望在Context Line Control下查看-A。