"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
选项一起使用,将文件的大小写颠倒。