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

Sed 替换许多js文件中的字符串,sed,Sed,我在一个目录和子目录下有许多文件(.js文件)。我想替换以“;”结尾的行,使用原始行加上print.f(“文件名”和行号”);。找到它的实际文件名和行号 示例-以“;”结尾的行 var x = 5; 应替换为 var x = 5;print.f("test.js with line number 16"); test.js和16是分别找到var x=5;的文件名和行号 编辑 test.js和16是示例,如果您灵活使用awk,则输出中应该是文件名和行号: awk '{printf $0} /.

我在一个目录和子目录下有许多文件(.js文件)。我想替换以“;”结尾的行,使用原始行加上
print.f(“文件名”和行号”);
。找到它的实际文件名和行号

示例-以“;”结尾的行

var x = 5;
应替换为

var x = 5;print.f("test.js with line number 16");
test.js
16
是分别找到
var x=5;
的文件名和行号

编辑


test.js和16是示例,如果您灵活使用
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"}'

你好,Jenish,谢谢。我尝试了awk命令,但当我在顶部给出目录名时,它返回了一个错误,说awk:read error(是一个目录)。它是否适用于目录,在目录下有子目录和文件。