Perl Unix-文件名和字符串结果在同一行
我需要搜索一个目录,该目录包含数百或数千个文件,每个文件包含一个或多个特定字符串实例(带数据的开始/结束标记)的XML。 我可以通过执行以下操作获得字符串的所有实例Perl Unix-文件名和字符串结果在同一行,perl,unix,grep,Perl,Unix,Grep,我需要搜索一个目录,该目录包含数百或数千个文件,每个文件包含一个或多个特定字符串实例(带数据的开始/结束标记)的XML。 我可以通过执行以下操作获得字符串的所有实例 grep -ho '<mytagname>..............<\/mytagname>' /home/xyzzy/mydata/*.XML > /home/mydata/tagvalues.txt (等) 理想情况下,我希望文件的每一行都包含文件名,以便导入数据库进行分析 所以我的结果是这样
grep -ho '<mytagname>..............<\/mytagname>' /home/xyzzy/mydata/*.XML > /home/mydata/tagvalues.txt
(等)
理想情况下,我希望文件的每一行都包含文件名,以便导入数据库进行分析
所以我的结果是这样的
fileAAA value001
fileAAA value002
fileAAA value003
fileBBB value004
上述内容的精确格式是灵活的,可以使用空格或其他分隔符,甚至还可以包含开始/结束标记
我能得到的最接近的是grep-o
fileAAA:value001
value002
value003
fileBBB:value004
perl一行程序似乎很理想,但我对这方面还很陌生,不知道如何开始
awk -F'</?mytagname>' '$2 {print FILENAME,$2}' /home/xyzzy/mydata/*.XML
awk-F''$2{打印文件名,$2}'/home/xyzy/mydata/*.XML
说明:
-set字段分隔符必须是一个单独的参数,因此包含在它自己的引号中-F regex
-如果第二个字段有值$2
-print FILENAME空格第二个字段的值{print FILENAME,$2}
- awk呢
awk -F'</?mytagname>' '$2 {print FILENAME,$2}' /home/xyzzy/mydata/*.XML
awk-F''$2{打印文件名,$2}'/home/xyzy/mydata/*.XML
说明:
-set字段分隔符必须是一个单独的参数,因此包含在它自己的引号中-F regex
-如果第二个字段有值$2
-print FILENAME空格第二个字段的值{print FILENAME,$2}
perl -lne 'print "$ARGV $1" if /<mytagname>(.*?)<\/mytagname>/' *.xml
可以使用如下所示的单层衬里:
perl -lne 'print "$ARGV $1" if /<mytagname>(.*?)<\/mytagname>/' *.xml
谢谢-这两个(perl和awk)都在某种程度上起作用:它们似乎只接受文件中第一个出现的字符串。当我使用我原来的grep时,我得到了成千上万的点击率(即使在我排序并获取唯一值之后)。当我按原样使用这两个命令中的任何一个时,我得到了大约7500个点击数,这是目录中的文件数。啊哈-做了一些挖掘,在另一篇文章中找到了答案-因此我将perl命令改为while(/(.*)/g)”,而不是if-这给了我一个更可信的数字。谢谢-这两个(perl和awk)在某种程度上起作用:它们似乎只接受文件中字符串的第一次出现。当我使用我原来的grep时,我得到了成千上万的点击率(即使在我排序并获取唯一值之后)。当我按原样使用这两个命令中的任何一个时,我得到了大约7500个点击,这是目录中的文件数。啊哈-做了一些挖掘,在另一篇文章中找到了答案-因此我将perl命令改为while(/(.*)/g)'而不是if-这给了我一个更可信的数字。