![将文件内容转换为小写并将结果存储在同一文件中](https://linux22.com/image/103654/%E5%B0%86%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9%E8%BD%AC%E6%8D%A2%E4%B8%BA%E5%B0%8F%E5%86%99%E5%B9%B6%E5%B0%86%E7%BB%93%E6%9E%9C%E5%AD%98%E5%82%A8%E5%9C%A8%E5%90%8C%E4%B8%80%E6%96%87%E4%BB%B6%E4%B8%AD.png)
我使用以下命令将输入文件内容转换为小写
tr A-Z a-z < input > output
这个命令工作正常。
但是当我尝试将输出存储在输入文件本身中时,它不起作用。执行命令后输入文件为空。为什么?
tr A-Z a-z < input > input
答案1
如果你有 GNUsed
你可以使用
sed -i 's/.*/\L&/' input
-i
就地修改文件s/old/new/
old
用。。。来代替new
.*
每行上的任意字符\L
小写&
匹配的模式
答案2
但是当我尝试将输出存储在输入文件本身中时,它不起作用。执行命令后输入文件为空。为什么?
因为这会导致 shell 在命令运行> input
之前截断文件。tr
顺便说一句,您可以使用更高级的描述符处理来解决这个问题Bash
:
exec 8<>input
exec 9<>input
tr '[A-Z]' '[a-z]' <&8 >&9
以读写模式将文件打开到描述符中而不截断exec #<>file
。#