我只需要一点帮助,因为我很少接触sed或awk.我正在尝试更换
String1.append("Hello"); // regexp to find this is: \w*\.append\(".*"\)
Run Code Online (Sandbox Code Playgroud)
同
String1.append("Hello", 5); // note it has to figure out the length of "Hello"
Run Code Online (Sandbox Code Playgroud)
我需要进行搜索并替换成千上万的文件.并且"Hello可以是任何东西......包括"\n \n \n",它应该是3而不是6.示例:
s.append("\n\n\n"); ---> s.append("\n\n\n", 3);
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助...我想我需要awk这样做,所以我正在阅读关于awk基础知识的教程...
由于您希望在包含代码的某些文件上运行此功能,因此以下是该完整功能的示例:
$ cat file
foo() {
String1.append("Hello");
if (bar) {
s.append("\n\n\n");
}
else {
s.append("\n\\n\n\\\n");
}
}
$
$ cat tst.awk
match($0,/[[:alnum:]_]+\.append\(".*"\)/) {
split(substr($0,RSTART,RLENGTH), orig, /"/)
head = substr($0,1,RSTART-1) orig[1]
tail = orig[3] substr($0,RSTART+RLENGTH)
tgt = orig[2]
gsub(/[\\][\\]/,"X",tgt)
gsub(/[\\]/,"",tgt)
$0 = sprintf("%s\"%s\", %d%s", head, orig[2], length(tgt), tail)
}
{ print }
$
$ awk -f tst.awk file
foo() {
String1.append("Hello", 5);
if (bar) {
s.append("\n\n\n", 3);
}
else {
s.append("\n\\n\n\\\n", 6);
}
}
Run Code Online (Sandbox Code Playgroud)
我将原始发布问题中的示例中的"\ w"替换为POSIX等效"[[:alnum:] _]"以便于移植."\ w"将与GNU awk和其他一些工具一起使用,但不是所有工具而不是所有工具.