我的硬盘上有一个网站,我需要在 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
将在文件名的每个换行符分隔部分之前插入其字符串。