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(q4312078q)}' < input
评论
请注意\ L是GNU扩展。
–安东
2014年12月5日,7:48
\ L到目前为止对我有用。阐明您要进行GNU扩展的要点
–JigarGandhi
2014年12月5日7:56
@JigarGandhi。 sed是Unix命令。不同的系统具有不同的变体,具有不同的行为和功能。幸运的是,如今,有一个最符合的标准,因此您可以指望所有通用的最少功能集。 \ L不在其中,由GNU sed引入(与标准ex / vi中的同一运算符匹配),通常在其他实现中不可用。
–StéphaneChazelas
2014-12-5 13:25
请注意,某些tr的实现(例如GNU tr)在多字节语言环境中无法正常工作(例如,当今大多数,请尝试echoSTÉPHANE| tr'[:upper:]''[:lower:]')。在GNU系统上,您可能更喜欢sed变体或awk的tolower()。
–StéphaneChazelas
2014年12月5日13:29
轻微校正:sed's /.*/ \ L&/ g'<输入。除非您用wurtle在括号中指定带括号的子字符串,否则对匹配子字符串的\ 1引用将不起作用。但是,使用&表示整个比赛较为干净,如图所示
–爱德华·布朗
16年11月4日15:30
#2 楼
使用vim超级简单:$ vim filename
gg0guGZZ
打开文件,
gg
转到第一行0
第一列。使用guG
,降低所有字符的大小写,直到文件底部。 ZZ
保存并退出。它应该处理几乎所有您扔给它的东西;它会忽略数字,它将处理非ASCII。重新设置。
评论
大声笑“超级简单”
–兰伯特
17年2月17日在21:50
这显然不能很好地扩展许多文件
– Corey Goldberg
17年11月25日在13:40
@CoreyGoldberg vim file1 file2 fileetc,然后类似:bufdo gg0guG:w
–TankorSmash
'18 Apr 22在0:18
@TankorSmash仍然无法缩放到大量文件
– Corey Goldberg
18年4月22日在15:39
#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
将在完成上述工作之后执行w /打印信息,例如处理了多少字节等。评论
处理大文件时,此解决方案比tr快得多,谢谢!
–WhiteWinterWolf
16年8月18日在13:02
#4 楼
您还可以使用Perl 5:-p
。 $_
表示该程序将是下一个参数,而不是包含该脚本的文件。 -e
转换为小写。不带任何参数,它将在lc
上运行。然后$_
再次保存,以便将其打印出来。最后不会打印。因此,除了保存到该变量之外,我还包括一个显式的print语句。与sed相比,Perl的一个优点是您不需要任何GNU扩展。有些项目必须与非GNU环境兼容,但也已经具有Perl a依赖性。与
$_=
相比,可能是Perl -n
可以更轻松地实现区域感知。有关详细信息,请参见-p
手册页。#5 楼
您需要捕获匹配的模式,然后将其用于带修饰符的替换中:\(...\)
,
的下一个,依此类推。在嵌套捕获的情况下,编号是根据开括号而定。 >评论
您不需要这样做-整个模式始终陷入&
–mikeserv
2014年12月5日,9:41
没错,但是那时候我会错失解释捕捉比赛的机会了:-)
–Wurtel
2014年12月5日,12:47
评论
另请参见如何在bash中将UTF-8 txt文件转换为全部大写?