bash - 将 Shell 中文件名或目录中每个单词的首字母大写

标签 bash shell unix

我正在尝试编写一个 shell 命令,我可以在其中指定一个目录,然后其中的每个文件和目录都会将每个单词的首字母大写。所以

/doCumenTS/tesT.txt

应该改为

/DoCumenTS/TesT.txt

我觉得应该这样开始

for i in directory do
tr something_goes_here
done

我想不通的问题是如何只做第一个字母。我制作了一个将整个文件名大写的脚本,但我不知道如何只获取每个单词的第一个字母。

谢谢!

最佳答案

使用 GNU Sed

您可以使用 GNU sed 轻松完成此操作。例如:

$ echo '/doCumenTS/tesT.txt' | sed 's!/.!\U&!g'
/DoCumenTS/TesT.txt

限制

请注意,\U 转义符是 GNU sed 扩展。手册说:

Finally, as a GNU 'sed' extension, you can include a special sequence made of a backslash and one of the letters 'L', 'l', 'U', 'u', or 'E'.

`\U'
     Turn the replacement to uppercase until a `\L' or `\E' is found

关于bash - 将 Shell 中文件名或目录中每个单词的首字母大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11370860/

相关文章:

linux - 为什么在 while 循环内发生 ping 未知主机?

python - 如何从脚本中获取直播网址

c - 原始套接字不发送

c - C中返回当前目录的函数是什么?

Linux 到 Windows 复制网络脚本

bash - 如何在 Dockerfile 中设置命令历史记录

bash - bash 脚本中的 grep + Jenkins

java - 如何使用sed命令批量更改java包声明

shell - 如何通过shell脚本导出多行环境变量

c - 在迷你 shell 中使用管道系统调用