다음 명령을 사용하여 입력 파일 내용을 소문자로 변환합니다.
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
.#