"我是Groot"应该改为"我是gROOT"使用sed one-liner。
我试过......
sed -e 's/(.*)/\L\1/' -e 's/(.*)/\U\1/'
...,但这两个表达似乎并不是并行运行。
有什么建议吗?
答案 0 :(得分:4)
使用sed:
$ echo "I am Groot" | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/'
i AM gROOT
tr
更紧凑(但是not unicode-safe):
$ echo "I am Groot" | tr '[:upper:][:lower:]' '[:lower:][:upper:]'
i AM gROOT
以下内容通过我们认为永远不会出现在sed输入行中的字符的帮助来切换案例。一种可能性是为该角色选择\x00
,因为它永远不会成为bash变量的一部分。另一种方法是选择\n
因为它永远不是sed输入行的一部分。对于以下内容,选择了\n
。
输入中的所有小写字符都标记为\n
。然后,任何大写字符都转换为小写。最后,任何前面带有\n
的字符都会转换为大写:
$ echo "I am Groot" | sed -r 's/[[:lower:]]/\n&/g; s/[[:upper:]]/\L&/g; s/\n(.)/\U\1/g'
i AM gROOT
答案 1 :(得分:0)
这可能适合你(GNU sed):
sesed "s/.*/echo '&'|tr '[:upper:][:lower:]' '[:lower:][:upper:]'/e" file
使用过GNU sed的评估命令,但为什么不只是使用tr
?
N.B。可以与-i
选项一起使用来反转文件的位置。