格式化 grep 输出

格式化 grep 输出

我的硬盘上有一个网站,我需要在 HTML 文件中查找关键字,然后输出到 html 文件,在新行中列出每个找到的内容。目前我正在使用下面的行,但输出并不理想。

grep -lUirn  -C 1  "Word1" *  >> report.html

上面的行产生如下内容:

      file1.html file2.html etc.html

但我需要它输出到文件中:

      file1.html 

      file2.html 

      etc.html

更理想的是将其输出为:

      http://relitivePath/file1.html 

      http://relitivePath/file2.html 

      http://relitivePath/etc.html

答案1

使用 GNU 时grep-U除非您在 MS-DOS 或 Windows 上运行,否则选项 (将所有文件视为二进制文件) 无效,并且(输出匹配行的行号) 与(仅输出匹配文件的名称-n) 结合使用时无效-l)。同样,-C 1(比赛周围的单行上下文)对 没有任何影响-l

匹配的文件已经在单独的行上报告,所以我不太明白为什么你把它们放在一行上。

grep -lr -Fiw 'Word1' .

应该可以满足您的要求。我添加了-F进行字符串比较而不是正则表达式匹配,以及-w进行完整单词(而非子字符串)的匹配。

要将输出转换为 URI:

grep -lr -Fiw 'Word1' . | sed 's,^,http://,'

这只是http://使用 插入到每行的开头sed

所有这些显然都假设没有文件名包含任何嵌入的换行符。如果这样做,sed将在文件名的每个换行符分隔部分之前插入其字符串。

相关内容