例如,假设我有以下数据
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的第一列为空时继续打印。
答案 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。