将文件内容转换为小写并将结果存储在同一文件中

将文件内容转换为小写并将结果存储在同一文件中

我使用以下命令将输入​​文件内容转换为小写

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#

相关内容