Jig*_*dhi 101 shell tcsh sed text-processing tr
我有temp一些小写和大写内容的文件。
我的temp文件内容:
hi
Jigar
GANDHI
jiga
Run Code Online (Sandbox Code Playgroud)
我想将所有upper转换为 lower。
我尝试了以下命令:
sed -e "s/[A-Z]/[a-z]/g" temp
Run Code Online (Sandbox Code Playgroud)
但得到了错误的输出。
我想要它:
hi
jigar
gandhi
jiga
Run Code Online (Sandbox Code Playgroud)
什么需要在论证的替代部分sed?
Ant*_*hon 153
如果您的输入仅包含 ASCII 字符,您可以使用tr类似:
tr A-Z a-z < input
Run Code Online (Sandbox Code Playgroud)
或(不太容易记住和输入 IMO;但不限于 ASCII 拉丁字母,尽管在包括 GNU 在内的某些实现中tr,仍仅限于单字节字符,因此在 UTF-8 语言环境中,仍仅限于 ASCII 字母):
tr '[:upper:]' '[:lower:]' < input
Run Code Online (Sandbox Code Playgroud)
如果您必须使用sed:
sed 's/.*/\L&/g' < input
Run Code Online (Sandbox Code Playgroud)
(这里假设 GNU 实现)。
使用 POSIX sed,您需要指定所有音译,然后您可以选择要转换的字母:
sed 'y/A?BC?DEFGH.../a?bc?defgh.../' < input
Run Code Online (Sandbox Code Playgroud)
与awk:
awk '{print tolower($0)}' < input
Run Code Online (Sandbox Code Playgroud)
Tan*_*ash 31
使用vim,超级简单:
$ vim filename
gg0guGZZ
Run Code Online (Sandbox Code Playgroud)
打开文件,gg转到第一行0,第一列。使用guG, 将所有字符的大小写降低到文件底部。ZZ保存并退出。
它应该处理你扔给它的任何东西;它会忽略数字,它将处理非 ASCII。
如果你想做相反的事情,把小写字母变成大写字母,把u外面的字母换成U:gg0gUGZZ就可以了。
mik*_*erv 18
我喜欢dd这个,我自己。
<<\IN LC_ALL=C 2<>/dev/null \
dd conv=lcase
hi
Jigar
GANDHI
jiga
IN
Run Code Online (Sandbox Code Playgroud)
……得到……
hi
jigar
ghandi
jiga
Run Code Online (Sandbox Code Playgroud)
这LC_ALL=C是为了保护输入中的任何多字节 - 尽管不会转换任何多字节大写。(GNU) 也是如此tr——这两个应用程序都容易在任何非 C 语言环境中进行输入修改。iconv可以与两者结合以获得全面的解决方案。
该2>/dev/null重定向丢弃dd的默认状态报告-和它的标准错误。如果没有它,dd将完成像上面这样的作业,并带有打印信息,例如处理了多少字节等。
MvG*_*MvG 13
你也可以使用 Perl 5:
perl -pe '$_=lc' temp
Run Code Online (Sandbox Code Playgroud)
该选项-p告诉 perl 为每行输入运行一次指定的表达式,打印结果,即$_. -e表示程序将是下一个参数,而不是包含脚本的文件。lc转换为小写。没有参数,它将对 进行操作$_。并$_=再次保存它以便打印。
一个变种是
perl -ne 'print lc' temp
Run Code Online (Sandbox Code Playgroud)
使用-n就像-p除了$_最终不会被打印出来。因此,我没有保存到该变量,而是包含了一个显式的打印语句。
与 sed 相比,Perl 的一个好处是您不需要任何 GNU 扩展。有些项目必须与非 GNU 环境兼容,但也已经具有 Perl asa 依赖项。与 相比tr,Perllc可能更容易识别区域设置。有关perllocale详细信息,请参阅手册页。
您需要捕获匹配的模式,然后在带有修饰符的替换中使用它:
sed 's/\([A-Z]\)/\L\1/g' temp
Run Code Online (Sandbox Code Playgroud)
在\(...\)“捕获”包封匹配的文本,第一个捕获进入\1下,旁\2所述的编号等,以开口括号嵌套捕获的情况下。
该\L摄像图案为小写转换,这里还有\U为大写。