tr 명령을 사용하십시오

tr 명령을 사용하십시오

파일에 ft25줄의 텍스트가 있다고 가정합니다. 명령을 설명하십시오.

tail -15 ft | tr "a" "A" > ft

ft그리고 명령이 실행된 후 파일에 몇 줄이 있는지 알려주세요.

나는 이것이 tail -15 ft파일의 마지막 15줄을 가져 ft와서 tr 'a' 'A'무엇 a이든 A.

> tr그런데 왜 파일의 모든 내용이 삭제되는지 이해가 되지 않습니다 .

답변1

쉘은 먼저 리디렉션(이 경우 > ft)을 설정한 다음 ft쓰기 위해 잘라내고 연 다음 나머지 파이프를 설정합니다. tail -15 ft빈 파일을 가져오고 빈 결과를 제공하며 tr아무것도 대체하지 않습니다. ft결과는 빈 파일입니다.

답변2

당신은표준 출력 리디렉션설마리디렉션 출력 추가 원본 파일에 출력을 추가하려고 하면 그렇게 생각하지 않습니다..

~에서man bash

출력 리디렉션파일이 없으면 생성되고, 있으면 0 크기로 잘립니다.

리디렉션 출력 추가이런 방식으로 출력을 리디렉션하면 단어 확장으로 인해 이름이 생성된 파일이 파일 설명자 n에 추가되거나 n이 지정되지 않은 경우 표준 출력(파일 설명자 1)에 추가하기 위해 열리게 됩니다. 파일이 존재하지 않으면 생성됩니다.

따라서 출력을 동일한 파일로 리디렉션하도록 지정하면 출력이 잘리고 예상되는 출력이 생성됩니다.

내가 추천하는 sed것은redirection

$ tail -15 ft | sed -e 's|a|A|g' > sed_output

답변3

올바른 bash 표기법을 사용하고 있지 않습니다.

Bash에서는 파일을 덮어쓰려면 '>file'을 사용하고 파일에 추가하려면 '>>file'을 사용해야 합니다. 대신 ">>ft"를 사용하세요.

관련 정보