파일 내용을 소문자로 변환하고 결과를 동일한 파일에 저장합니다.

파일 내용을 소문자로 변환하고 결과를 동일한 파일에 저장합니다.

다음 명령을 사용하여 입력 파일 내용을 소문자로 변환합니다.

tr A-Z a-z < input > output 

이 명령은 잘 작동합니다.

하지만 입력 파일 자체에 출력을 저장하려고 하면 작동하지 않습니다. 명령을 실행한 후 입력 파일이 비어 있습니다. 왜?

 tr A-Z a-z < input > input 

답변1

GNU가 있다면 sed사용할 수 있습니다

sed -i 's/.*/\L&/' input
  • -i그 자리에서 파일 수정
  • s/old/new/old사용. . . 교체new
  • .*각 줄의 모든 문자
  • \L소문자
  • &일치하는 패턴

답변2

하지만 입력 파일 자체에 출력을 저장하려고 하면 작동하지 않습니다. 명령을 실행한 후 입력 파일이 비어 있습니다. 왜?

이로 인해 명령이 실행되기 전에 쉘이 > input파일을 자르게 되기 때문입니다. tr그런데, 고급 설명자 처리를 사용하여 이 문제를 해결할 수 있습니다 Bash.

exec 8<>input
exec 9<>input
tr '[A-Z]' '[a-z]' <&8 >&9

잘림 없이 읽기-쓰기 모드로 설명자로 파일을 엽니다 exec #<>file.#

관련 정보