将文件内容转换为小写

将文件内容转换为小写

我有temp一些包含小写和大写内容的文件。

输入

我的文件内容temp

hi
Jigar
GANDHI
jiga

我想全部转换从上到下

命令

我尝试了以下命令:

sed -e "s/[A-Z]/[a-z]/g" temp

但输出错误。

输出

我希望它是:

hi
jigar
gandhi
jiga

需要在什么代替论证的一部分sed

答案1

如果您的输入仅包含 ASCII 字符,您可以使用tr

tr A-Z a-z < input 

或(不太容易记住和键入 IMO;但不限于 ASCII 拉丁字母,尽管在包括 GNU 在内的某些实现中tr,仍然仅限于单字节字符,因此在 UTF-8 语言环境中,仍然仅限于 ASCII 字母):

tr '[:upper:]' '[:lower:]' < input

如果你必须使用sed

sed 's/.*/\L&/g' < input

(这里假设 GNU 实现)。

使用 POSIX sed,您需要指定所有音译,然后您可以选择要转换的字母:

sed 'y/AǼBCΓDEFGH.../aǽbcγdefgh.../' < input

awk

awk '{print tolower($0)}' < input

答案2

使用 vim,超级简单:

$ vim filename
gg0guGZZ

打开文件,gg转到第一行、0第一列。使用 时guG,会降低所有字符的大小写,直到文件底部。ZZ保存并退出。

它应该能够处理你扔给它的任何东西;它会忽略数字,它会处理非 ASCII。

如果您想做相反的事情,请将小写字母变成大写字母,将其替换uU:gg0gUGZZ即可。

答案3

dd自己就喜欢这个。

<<\IN LC_ALL=C 2<>/dev/null \
dd conv=lcase
hi
Jigar 
GANDHI
jiga
IN

...得到...

hi
jigar
ghandi
jiga

LC_ALL=C是为了保护输入中的任何多字节 - 尽管任何多字节大写都不会被转换。对于(GNU) tr- 这两个应用程序都容易在任何非 C 语言环境中出现输入损坏。iconv可以与其中任何一个结合起来形成全面的解决方案。

重定向2>/dev/null丢弃dd的默认状态报告 - 及其 stderr。如果没有它,dd就会完成上面的工作,并打印信息,例如处理了多少字节等。

答案4

您需要捕获匹配的模式,然后在带有修饰符的替换中使用它:

sed 's/\([A-Z]\)/\L\1/g' temp

“捕获\(...\)”封闭的匹配文本,第一个捕获转到\1,下一个捕获到\2,等等。在嵌套捕获的情况下,编号根据左括号进行。

\L将捕获的模式转换为小写,也有大写\U

相关内容