用换行符输出grep

时间:2012-12-04 21:32:31

标签: perl bash sed awk text-parsing

我正在开发一个脚本,该脚本解析open xml文档中的信息并解析脚本的输出以提供csv输出。

我陷入了最后的障碍。

find /media/path/to/files -type f -iname '*.xlsx' -exec perl parseXML.py {} \; \
    | grep -v 'Document\ name\|creator\|lastModified\|Printed\|created\|modified' \
    | tr '\n' '.'; echo \n \
    >> list.csv

这个输出的问题是我最终得到了一个包含所有文档的大量列表,并且在python或perl中排序出现在我的知识级别之上。

我希望有一种方法可以通过使用sed

来避免偏移
(find /media/E01880-0-CH5-W001/Working/E01880-4-CH5-E001/ED/ -type f -iname '*.xlsx' -exec perl parseXML.py {} \; | grep 'Document\ name\|creator\|lastModified\|Printed\|created\|modified' | tr '\n' '.'; echo \)n >> list.csv

唉无济于事,这只是删除包含修改信息的行。

最后,今晚我尝试使用sed和一些正则表达式来改变输出

cat PleaseWork.csv | sed  -i 's/modified[^"\r\n]*\./&\\n/g' >> NewFile.csv

理论上的语法应该替换修改后的任何字符,直到具有匹配表达式和新行的句点,但我收到sed错误没有输入文件,我想我现在已经足够盯着屏幕了。

请帮忙。

我正在使用google的snortdlp代码:

http://snortdlp.googlecode.com/svn-history/r115/trunk/src/python/read_open_xml.pl

1 个答案:

答案 0 :(得分:1)

如果我正确地解释了您的问题,您正在尝试输出与“文档名称”,“创建者”等匹配的所有文件的整行(但不是换行符),并打印整行(和换行符) )对于匹配'modified'的行。只需跳过grep并使用awk:

awk '/Document name|creator/{printf "%s.", $0} /modified/'

(为了清晰起见,我缩短了比赛时间 - 根据需要添加其他标签。)