如何使用一行代码切换字符串中字符的大小写



"I am Groot"应该改成"I am Groot"

我试过…

sed -e 's/(.*)/L1/' -e 's/(.*)/U1/'

…,但两个表达式似乎不能并行运行。

有什么建议吗?

使用sed:

$ echo "I am Groot" | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/'
i AM gROOT

tr更紧凑一些(但不是unicode安全的):

$ echo "I am Groot" | tr '[:upper:][:lower:]' '[:lower:][:upper:]'
i AM gROOT

另一个sed解决方案(需要GNU sed)

下面的代码在一个我们认为永远不会出现在sed输入行中的字符的帮助下切换大小写。一种可能是为该字符选择x00,因为它永远不可能是bash变量的一部分。另一个选择是n,因为它从来不是sed输入行的一部分。下面选择n

输入中的所有小写字符都通过在它们前面加上n来标记。然后,将任何大写字符转换为小写字符。最后,任何前面有n的字符都被转换为大写:

$ echo "I am Groot" | sed -r 's/[[:lower:]]/n&/g; s/[[:upper:]]/L&/g; s/n(.)/U1/g'
i AM gROOT

这可能适合您(GNU sed):

sesed "s/.*/echo '&'|tr '[:upper:][:lower:]' '[:lower:][:upper:]'/e" file

使用GNU sed的评估命令,但为什么不直接使用tr呢?

注意:可以与-i选项一起使用,将文件的大小写颠倒。

最新更新