![如何使用 bash 将字符从大写替换为小写,考虑到这些字符位于标签?](https://linux22.com/image/1506921/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20bash%20%E5%B0%86%E5%AD%97%E7%AC%A6%E4%BB%8E%E5%A4%A7%E5%86%99%E6%9B%BF%E6%8D%A2%E4%B8%BA%E5%B0%8F%E5%86%99%EF%BC%8C%E8%80%83%E8%99%91%E5%88%B0%E8%BF%99%E4%BA%9B%E5%AD%97%E7%AC%A6%E4%BD%8D%E4%BA%8E%E6%A0%87%E7%AD%BE%EF%BC%9F.png)
我有很多文件包含大小写混合的 URL,我需要将其转换为小写,只更改文件内的链接,其余内容保持不变。我发现这可以通过在 Notepad++ 中使用正则表达式来实现:
在文件中查找
搜索:(href=['"])(.+)(['"])
替换为:\1\L\2\3
但是,我需要使用 bash 或 vim 来执行此操作。我该怎么做?此外,如何将其应用于各个文件夹中的多个文件?
答案1
在 Bash 中:
sed -i 's/<a href.*\">/\L&/' file.txt
在 VIM 中:
:%s/<a href.*\">/\L&/
我不确定您是只想更改 FQDN,还是更改整个 URL,或者每个锚点都单独占一行,这些应该可以满足任何情况。这只会更改锚点 URL,而不会更改锚文本(我假设这就是您要问的)
编辑:
如果要将其应用于不同文件夹中的多个文件,cd
请转到包含要编辑的所有文件和子文件夹的基本目录,然后运行以下命令:
find . -type f -name "*.html" | while read line; do sed -i 's/<a href.*\">/\L&/' $line; done
这将查找您当前目录(您应该cd
进入的目录)和以 .html 结尾的子目录中的任何文件,并执行前面提到的 sed 命令。(根据需要调整文件扩展名)。