gpt4 book ai didi

递归地使文件中的所有文本小写的 Bash 脚本

转载 作者:行者123 更新时间:2023-11-29 09:34:52 24 4
gpt4 key购买 nike

我正在尝试编写一个 shell 脚本,它递归地遍历一个目录,然后在每个文件中将所有 Uppercase 字母转换为 lowercase 字母。明确地说,我不是要更改文件名,而是要更改文件中的文本。

注意事项:

  1. 这是一个旧的 Fortran 项目,我正在努力使其更易于访问
  2. 我不想创建新文件,而是用更改覆盖旧文件
  3. 该目录下有几个不同的文件扩展名,包括.par .f .txt 等

解决此问题的最佳方法是什么?

最佳答案

要将文件从小写转换为大写,您可以使用 ex(ed 的好 friend ,标准编辑器):

ex -s file <<EOF
%s/[[:upper:]]\+/\L&/g
wq
EOF

或者,如果您喜欢一行内容:

ex -s file <<< $'%s/[[:upper:]]\+/\L&/g\nwq'

结合find,你可以做:

find . -type f -exec bash -c "ex -s -- \"\$0\" <<< $'%s/[[:upper:]]\+/\L&/g\nwq'" {} \;

对于文件名中的空格和有趣的符号,此方法是 100% 安全的。没有创建、复制或移动辅助文件;文件仅被编辑。

编辑。

使用 glenn jackmann的建议,你也可以这样写:

find . -type f -exec bash -c 'printf "%s\n" "%s/[[:upper:]]\+/\L&/g" "wq" | ex -- -s "$0"' {} \;

(优点是它避免了尴尬的转义;缺点是它更长)。

关于递归地使文件中的所有文本小写的 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13593352/

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