gpt4 book ai didi

linux - 批量替换同一直接和子文件夹中的字符串

转载 作者:太空宇宙 更新时间:2023-11-04 08:58:45 24 4
gpt4 key购买 nike

我正在尝试使用以下方式来替换我的字符串

grep -rl matchstring . | xargs sed -i 's/string1/string2/g'

我想要实现的实际上是目前我得到了一个像这样的硬编码域名

http://account.mysmallwebsite.com
https://account.mysmallwebsite.com

因为这很不灵活,所以我更喜欢

<?php echo $domainName;?>

domainName 的变量将被设置在一个 php 文件中,所有文件都将包含这个文件,所以将来如果我改变域,只改变一个地方而不是多个页面会更容易。

并替换所有出现的网站

http://account.mysmallwebsite.com
https://account.mysmallwebsite.com

使用回显字符串,但如何通过 putty shell ssh 的命令行实现它

最佳答案

您可以使用以下内容:

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;?> .
    • 注意 # 的用法作为分隔符而不是典型的 / , 这样我们就不必对 URL 中的斜线进行转义。
    • -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

关于linux - 批量替换同一直接和子文件夹中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25740761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com