파일에 텍스트를 어떻게 추가합니까?


109

Linux에서 파일에 텍스트를 추가하는 가장 쉬운 방법은 무엇입니까?

나는 이 질문 을 보았지만 허용 된 답변은 추가 프로그램을 사용합니다 ( sed) 나는 더 쉬운 방법이 있어야한다고 확신합니다 echo.

답변:


125
cat >> filename
This is text, perhaps pasted in from some other source.
Or else entered at the keyboard, doesn't matter. 
^D

기본적으로 파일에 원하는 텍스트를 덤프 할 수 있습니다. CTRL-D는 입력을 종료하고 쉘로 돌아가는 파일 끝 신호를 보냅니다.


2
파일에 루트 권한이 필요한 경우 어떻게해야합니까?
UselesssCat jul.

2
@UselesssCat 뭔가 "권한이 거부"되면 내가 실행중인 명령을 다시 확인한 다음 사용 sudo !!-마지막 명령을 sudo앞에 추가 하여 실행합니다 . 나는 최근에 이것이 또한 nano(우연히 시도함으로써 nano nano auth...) 작동 한다는 것을 알게되었다
Sandra

sudo를 사용하거나 스크립트에서 이것을 사용해야하는 경우 아래에서 수락 된 답변에 대한후속 조치를 참조하십시오 .
user12345

4
나는 고양이가 이렇게 사용될 수 있는지 몰랐다! 일지를 쓰는 것과 같습니다. 또한 ctrl-d가 무엇을하는지 몰랐습니다. 감사합니다!
houallet

1
@Sandra- !!전에 사용하지 않았어요 . 나는 종종 같은 일을 cat /var/log/apache/error.log하고 허가를받지 못합니다 . 이것은 또한 히스토리의 ID로 수행 될 수 있습니다. 예를 들어 sudo !1419이것은 1419히스토리의 라인 에서 sudo로 명령을 실행합니다 .
Cyclonecode

172

어때 :

echo "hello" >> <filename>

>>연산자를 사용하면 파일 끝에 데이터가 추가되고를 사용 >하면 이미있는 경우 파일의 내용을 덮어 씁니다.

당신은 또한 사용할 수 있습니다 printf동일한 방식으로 .

printf "hello" >> <filename>

위의 내용을 사용하는 것은 위험 할 수 있습니다. 예를 들어 이미 파일이 있고 파일 끝에 데이터를 추가해야하는데 마지막 추가를 잊어 버린 >경우 파일의 모든 데이터가 파괴됩니다. 에서 noclobber변수를 설정하여이 동작을 변경할 수 있습니다 .bashrc.

set -o noclobber

이제 그렇게하려고하면 다음과 echo "hello" > file.txt같은 경고가 표시 cannot overwrite existing file됩니다.

파일에 강제로 쓰려면 이제 특수 구문을 사용해야합니다.

echo "hello" >| <filename>

또한 기본적으로 플래그 echo를 사용하여 억제 할 수있는 후행 개행 문자를 추가 한다는 것을 알아야합니다 -n.

echo -n "hello" >> <filename>

참고 문헌


4
일반적으로 나는를 사용하는 허용되는 대답보다 이것을 더 좋아 cat하지만 >>대신 사용하도록 조심하는 것이 좋습니다 >!
sixty4bit

@ sixty4bit-전적으로 동의하지만, 쉘로 작업 할 때 무엇을하는지 항상 알아야한다고 생각합니다. 그렇지 않으면 sudo rm -r /=) 와 같은 일을 할 수 있습니다.
Cyclonecode

1
보다 sudo rm -r /낫다 sudo rm -rf /! ^ _ ^ 기존 파일의 내용을 덮어 쓰기 전에 확인을 요청하는 플래그가 >있습니까? 항상 그런 플래그를 사용하도록 별칭을 지정하는 것이 좋은 생각 인 것 같습니다.
sixty4bit

2
@ sixty4bit-추가 할 수 있습니다 set -o noclobber. .bashrc그러면 특수 구문을 사용하지 않고 기존 파일을 덮어 쓸 수 없습니다echo "hello" >| <filename>
Cyclonecode

"myFile.txt"같은 파일이 호출되는 예를 말씀해 주시겠습니까? 귀하의 예에서 <filename> 또는 파일 이름인지 잘 모르겠습니다
bharal

24

다른 가능한 방법은 다음과 같습니다.

echo "text" | tee -a filename >/dev/null

그만큼 -a 파일 끝에 추가됩니다.

필요한 sudo경우 다음을 사용하십시오.

echo "text" | sudo tee -a filename >/dev/null

끝에> / dev / null이 필요한 이유는 무엇입니까?
Quadrivium

1
>/dev/null최종 방지 "텍스트"에서이 콘솔에 표시합니다.
user9869932

13

수락 된 답변에 대한 후속 조치를 취하십시오.

스크립트에서 이것을 사용하는 경우 끝을 지정하려면 CTRL-D 이외의 것이 필요합니다 . 대신 이것을 시도하십시오.

cat << EOF >> filename
This is text entered via the keyboard or via a script.
EOF

이렇게하면 명시된 파일에 텍스트가 추가됩니다 ( "EOF"제외).

그것은 사용 여기에 문서 (또는 히어 닥을) .

그러나 명시된 파일에 추가하기 위해 sudo가 필요한 경우 명령 줄에 직접 입력하는 경우 I / O 리디렉션으로 인해 heredoc을 사용하는 데 문제가 발생합니다.

이 변형은 명령 줄에 직접 입력 할 때 작동합니다.

sudo sh -c 'cat << EOF >> filename
This is text entered via the keyboard.
EOF'

또는 tee대신 cat과 함께 heredoc을 사용할 때 나타나는 명령 줄 sudo 문제를 피할 수 있습니다 .

tee -a filename << EOF
This is text entered via the keyboard or via a script.
EOF

나는 cat << 'EOF' >몇 년 동안 사용해 왔고 cat << 'EOF' >>추가 할 것인지 몰랐습니다 ! 감사합니다
FreeSoftwareServers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.