Answers:
如果您的输入仅包含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
\L
是GNU扩展。
\L
到目前为止对我有用。En阐明了您要扩展GNU
sed
是Unix命令。不同的系统具有具有不同行为和功能的不同变体。幸运的是,如今,有一个最符合的标准,因此您可以指望所有通用的最少功能集。\L
不在其中,而是由GNU引入的sed
(与standard ex
/ 中的相同运算符匹配vi
),通常在其他实现中不可用。
tr
实现(例如GNU)tr
在多字节语言环境中无法正常工作(echo STÉPHANE | tr '[:upper:]' '[:lower:]'
例如,现在大多数尝试使用)。在GNU系统中,你可能更喜欢sed
变体或awk
的tolower()
。
sed 's/.*/\L&/g' < input
。\1
除非您用wurtle在括号中指定带括号的子字符串,否则对匹配子字符串的引用将不起作用。然而,这是稍微清洁剂使用&
,以代表整个匹配,如图所示
使用vim,它非常简单:
$ vim filename
gg0guGZZ
打开文件,gg
转到第一行0
第一列。使用guG
,减小所有字符的大小写,直到文件底部。ZZ
保存并退出。
它应该处理几乎所有您扔给它的东西;它将忽略数字,将处理非ASCII。
如果您想做相反的操作,则将小写字母变成大写字母,将u
输出换成U
:即可gg0gUGZZ
。
vim file1 file2 fileetc
然后像:bufdo gg0guG:w<CR>
将可能为任意数量的文件的工作。虽然还没有测试!
我dd
自己喜欢这个。
<<\IN LC_ALL=C 2<>/dev/null \
dd conv=lcase
hi
Jigar
GANDHI
jiga
IN
...得到...
hi
jigar
ghandi
jiga
本LC_ALL=C
是为了保护任何multibytes输入-虽然任何多资金不会被转换。(GNU) 也是这样tr
-这两个应用程序都容易在任何非C语言环境中进行输入处理。iconv
可以与任何一个结合使用以获得全面的解决方案。
该2>/dev/null
重定向丢弃dd
的默认状态报告-和它的标准错误。没有它,dd
将完成诸如上述的工作并打印信息,例如处理了多少字节等等。
tr
处理大文件时快得多,谢谢!
您还可以使用Perl 5:
perl -pe '$_=lc' temp
该选项-p
告诉perl为输入的每一行运行一次指定的表达式,打印结果,即的最终值$_
。-e
指示程序将是下一个参数,而不是包含脚本的文件。lc
转换为小写。无需争论,它将在上运行$_
。并$_=
再次保存,以便将其打印出来。
的变化将是
perl -ne 'print lc' temp
使用-n
是一样-p
,只是$_
不会得到最终打印。因此,我没有包含该变量,而是包含了一个显式打印语句。
与sed相比,Perl的一个优点是您不需要任何GNU扩展。有些项目必须与非GNU环境兼容,但也已经具有Perl作为依赖项。与相比tr
,可能是Perl lc
可以更轻松地实现区域感知。有关perllocale
详细信息,请参见手册页。
您需要捕获匹配的模式,然后将其用于带有修饰符的替换中:
sed 's/\([A-Z]\)/\L\1/g' temp
在\(...\)
“捕获”的包围匹配的文本,第一个捕获进入\1
下,旁\2
所述的编号等,以在嵌套捕获的壳体开口括号。
该\L
转换摄像图案以降低情况下,也\U
为大写。
&
除了MvG的答案,您还可以使用Perl 6:
perl6 -pe .=lc temp
这里$ _是隐式的,并且您不需要单引号来保护它不受shell的影响($ _是特殊的Bash参数;请参阅:https : //www.gnu.org/software/bash/manual/ html_node / Special-Parameters.html)