我使用以下命令将输入文件内容转换为小写
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
。#