我有几个目录,所有目录中都有它自己的index.html文件。我想扫描这些目录(我不知道它们的名称和名称),并在其中包含的所有index.html文件中替换一行。
我要查找的行是base href="
。我想在该字符串的末尾放置一个给定的文本。例如,文本可能是:/testing/demo
。然后,我希望所有index.html文件都包含base href="/testing/demo
。
此外,还必须执行两个附加步骤-如果给定字符串的末尾有一个斜杠/
,则应将其删除。如果开头没有斜杠,则应添加斜杠。
我尝试以某种方式使用sed
命令。
答案 0 :(得分:2)
您可以使用以下命令查找所有index.html文件,并在base href="
之后添加字符串:
请不要忘记将
-i
添加为sed
的一个选项,以便对其进行修改
-E
用于扩展正则表达式的使用,如此处所述:
-E,-r,-regexp扩展 在脚本中使用扩展的正则表达式 (出于可移植性,请使用POSIX -E)。
我们从查找每个index.html
文件开始,而不区分大小写。然后我们使用sed
找到base href=
并将其捕获到一个组中,然后将其作为\1
传递到sed命令的第二部分,之后添加要附加的字符串
对于问题的第二部分,我们可以考虑在字符串的开头删除任何/
,也可以在结尾删除所有/
,然后将结果保存到一个变量中,该变量将传递给sed
PARSED_URL=$(echo '/testing/demo/' | grep -oP '[^/].*[^/$]') ; find /path/you/want/to/lookup/ -iname "index.html" -exec sed -E "s~(base\shref=\")~\1/$PARSED_URL~g" {} \;
输入1:
/testing/demo/
输入2:
testing/demo/
输入3:
/testing/demo
输入4:
testing/demo
输出(将其附加到base href="
之后)
base href="/testing/demo