我正在尝试使用以下方法替换我的字符串
grep -rl matchstring . | xargs sed -i 's/string1/string2/g'
我想要实现的目前实际上我有一个像
这样的硬编码域名http://account.mysmallwebsite.com
https://account.mysmallwebsite.com
因为这是非常不灵活的,我宁愿只是
<?php echo $domainName;?>
domainName的变量将在php文件中设置,并且所有文件都将包含此文件,因此将来如果我更改域,则更改1个地方而不是多个页面会更容易。
并替换所有出现的网站
http://account.mysmallwebsite.com
https://account.mysmallwebsite.com
使用echo字符串,但是如何通过putty shell ssh
中的命令行实现它答案 0 :(得分:3)
您可以使用以下内容:
find . -name "*.php" -exec sed -r -i.bak 's#http(s?)://account.mysmallwebsite.com#<?php echo $domainName;?>#g' {} \;
find . -name "*.php" -exec ... {} \;
这会查找名称以.php
结尾的文件,并执行...
中指示的命令。sed -r -i.bak 's#http(s?)://account.mysmallwebsite.com#<?php echo $domainName;?>#g' file
:
http(s?)://account.mysmallwebsite.com
,即http
+可能是s
+ ://account.mysmallwebsite.com
,并将其替换为<?php echo $domainName;?>
。#
作为分隔符而不是典型的/
,这样我们就不必转义网址中的斜杠。-i.bak
创建一个扩展名为.bak
的备份文件,而原始版本则会就地编辑。-maxdepth
值来定义要处理的子目录级别。例如,-maxdepth 1
只会检查当前目录,而-maxdepth 2
也会包含给定目录的子文件夹。图形:
s#http(s?)://account.mysmallwebsite.com#<?php echo $domainName;?>#g
^ ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^
| ^^^^^^|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ substitution ^
| | look for this text replace all matches
| may be an "s"
^
search
请参阅运行中的sed
命令:
$ cat a
hello
http://account.mysmallwebsite.com
https://account.mysmallwebsite.com
httpss://account.mysmallwebsite.com
bye
$ sed -r 's#http(s?)://account.mysmallwebsite.com#<?php echo $domainName;?>#g' a
hello
<?php echo $domainName;?>
<?php echo $domainName;?>
httpss://account.mysmallwebsite.com
bye