替换许多js文件中的字符串

时间:2015-06-28 06:26:47

标签: sed

我在目录和子目录下有很多文件(.js文件)。我想用原始行加print.f("filename" with linenumber");替换以&#39 ;;'结尾的行。找到它的实际文件名和亚麻布。

示例 - 以';'

结尾的行
var x = 5;

应替换为

var x = 5;print.f("test.js with line number 16");

test.js16是分别找到var x = 5;的文件名和亚麻布。

修改

test.js和16是样本,在输出中它应该是文件名和linemunber

1 个答案:

答案 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"}'