我在目录和子目录下有很多文件(.js文件)。我想用原始行加print.f("filename" with linenumber");
替换以&#39 ;;'结尾的行。找到它的实际文件名和亚麻布。
示例 - 以';'
结尾的行var x = 5;
应替换为
var x = 5;print.f("test.js with line number 16");
test.js
和16
是分别找到var x = 5;
的文件名和亚麻布。
修改
test.js和16是样本,在输出中它应该是文件名和linemunber
答案 0 :(得分:1)
如果您可以灵活使用awk
:
awk '{printf $0} /.*\;$/{printf " print.f(\"" FILENAME " with line number " NR "\");"} {printf "\n"}' filename
每当行以print.f
结尾时,这将添加;
语句。
除非您拥有GNU awk 4.1.0或更高版本,否则您必须将命令的输出临时写入文件,然后再将其移回。
对于GNU awk 4.1.0及更高版本,您可以使用-i
选项进行内部文件编辑。
gawk -i '{printf $0} /.*\;$/{printf " print.f(\"" FILENAME " with line number " NR "\");"} {printf "\n"}' filename
要查找所有.js
个文件并对其运行上述gawk
命令:
find . -type f -name "*.js" | xargs gawk -i '{printf $0} /.*\;$/{printf " print.f(\"" FILENAME " with line number " NR "\");"} {printf "\n"}'