파일에 여러 줄을 추가하는 방법


301

파일이 존재하지 않으면 파일을 찾아 bash 스크립트를 작성하여 파일에 추가하십시오.

Host localhost
    ForwardAgent yes

그래서 "line then new line 'tab' then text"민감한 형식이라고 생각합니다. 나는 당신이 이것을 할 수 있다는 것을 알고 있습니다 :

cat temp.txt >> data.txt

그러나 두 줄 이후로 이상하게 보입니다. 이 형식으로 추가하는 방법이 있습니까?

echo "hello" >> greetings.txt

답변:


526
# possibility 1:
echo "line 1" >> greetings.txt
echo "line 2" >> greetings.txt

# possibility 2:
echo "line 1
line 2" >> greetings.txt

# possibility 3:
cat <<EOT >> greetings.txt
line 1
line 2
EOT

파일에 쓰는 데 sudo (다른 사용자 권한)가 필요한 경우 다음을 사용하십시오.

# possibility 1:
echo "line 1" | sudo tee -a greetings.txt > /dev/null

# possibility 3:
sudo tee -a greetings.txt > /dev/null <<EOT
line 1
line 2
EOT

2
@TheLegend "여기 문서"라고합니다. 매뉴얼 페이지에서 해당 단락을 살펴보십시오.
Hauke ​​Laging

1
또 다른 가능성은 ( echo "line 1" ; echo "line 2" ) >>greetings.txt입니다.
ott--

2
@ ott-- 당신은 실제 서브 쉘이 필요하지 않습니다 (즉, 하나의 새로운 프로세스를 저장할 수 있습니다), 이것으로 충분합니다 :{ echo "line 1" ; echo "line 2"; } >>greetings.txt
Hauke ​​Laging

2
EOT와 EOL의 차이점은 무엇입니까?
cikatomo

15
@cikatomo In cat <<EOTEOT임의의 문자열입니다. 도 될 수 있습니다 cat <<FOO.
Hauke ​​Laging

60
printf '%s\n    %s\n' 'Host localhost' 'ForwardAgent yes' >> file.txt

또는 질문에 네 개의 공백이 아닌 문자 그대로의 탭인 경우 :

printf '%s\n\t%s\n' 'Host localhost' 'ForwardAgent yes' >> file.txt

와 동일한 효과를 얻을 수 echo있지만 구현마다 구현 방법이 다르지만 printf일정합니다.



16

다른 접근 방식은 tee

tee -a ~/.ssh/config << END
Host localhost
  ForwardAgent yes
END

tee의 매뉴얼 페이지 에서 몇 가지 선택 라인 :

티 유틸리티는 표준 입력을 표준 출력에 복사하여 0 개 이상의 파일로 복사합니다.

-a-파일을 덮어 쓰지 않고 출력을 파일에 추가합니다.


6

SED는 다음과 같이 파일의 끝에 행을 추가 할 수 있습니다. 파일의 끝을

sed -i '$ a text to be inserted' fileName.file
$선택 a하고 추가 하도록 지시 한 후 삽입 할 텍스트를 표시합니다. 물론 파일 이름입니다.


출처 : http://www.yourownlinux.com/2015/04/sed-command-in-linux-append-and-insert-lines-to-file.html

========== EDIT == ==========

이 방법은 다른 솔루션보다 추가 이점이 있습니까?
예,이 접근 방식은 다음과 같이 검색시 반환되는 파일에 추가 할 수있는 이점이 있습니다. find . -name "*.html" -exec sed -i '$ a </html>' {} \;

위 예제를 사용하여 여러 디렉토리 내의 모든 html 페이지에서 누락 된 html 태그를 삽입했습니다.

====================================


1
파일에 여러 줄을 추가하는 구문을 표시하면 질문에 대한 답변입니다 (매우 유용한 것은 아니지만). 다른 모든 답변은 단순히 새로운 텍스트를 작성합니다. 이 답변은 전체 파일을 읽고 다시 작성한 텍스트와 추가 된 텍스트를 읽습니다. 이 접근 방식이 다른 접근 방식보다 이점이 있습니까?
G-Man

이것은 GNU에서만 작동합니다 sed. BSD sed는 다음 오류와 함께 중단됩니다 command a expects \ followed by text. 따라서 스크립트 솔루션에는 이것을 사용하지 마십시오. 깨지기 쉽다. (또는 BSD 필수 구문이 POSIX와 호환되며 GNU sed에서도 작동하므로 올바르게 수행하십시오 .
Wildcard

다른 답변은 find다음과 같이 사용할 수 있습니다 find . -name "*.txt" -exec sh -c 'printf "%s\n\t%s\n" "Host localhost" "ForwardAgent yes" >> "$1"' sh {} ";".
G-Man

1
이것은 스트림 재 (하지 않는 한, 아주 좋은 솔루션입니다 >, >>달리기 등 자신의 문제에서 고통을하지 않습니다 따라서) 및 sudo echo 'something' > /file. 나를 위해 그것은 lxd 컨테이너의 파일에 다음과 같은 행을 완벽하게 추가 할 수 있습니다 lxc exec c sed -- '$ a newline' /myfile.
Draco Ater

echo "a new line" >> foo.file파일이 새로운 라인의 끝 아니라, 새로운 라인을 만들지 않습니다 sed -i '$ a a new line' foo.file, 그래서 할 것이다 sed, 특히 당신은 항상 파일에 새 줄을 추가하려는 좋습니다.
zhouji

1

sudo와 함께 사용할 수 있기 때문에 sed를 사용했습니다. 예를 들면 다음과 같습니다.

sudo sed -i '$ a text to be inserted' fileName.file 

대안은 다음과 같이 매우 추악합니다.

sudo bash -c "echo a text to be inserted >> fileName.file"  

ssh로 끝났을 때 더 못 생겼습니다.


1
이 답변이 다운 보트 된 이유는 무엇입니까? 이것은 내가 필요한 솔루션처럼 보입니다. 그것에 문제가 있습니까? 그렇지 않다면 그것을 사용하고 찬성합니다.
MountainX

당신이 있습니까 sed -i인수로 확장을하지? 예제에 잘못된 매개 변수가있을 수 있습니다.
protometa

1

또 다른 라이너는 다음과 같습니다.

echo "Greetings 1" >> greetings.txt && echo "Greetings 2" >> greetings.txt

-e더 많은 제어 기능을 제공 하므로 옵션 사고를 선호합니다 .

echo -e "Greeting 1\nGreetings 2\n" >> greetings.txt

1

cat >> out.txtPerl 또는 Python으로 에뮬레이션 하여 동일한 효과를 얻을 수 있습니다. 펄 :

perl -e 'open(fh,">>","./out.txt");while(<>){printf(fh "%s",$_)};close(fh);'

그리고 파이썬 :

python -c 'import sys;f=open(sys.argv[1],"a");l=[i for i in sys.stdin];f.write("".join(l))' out.txt 

파이썬의 경우 Ctrl+를 D두 번 눌러야합니다. 자세한 내용 은 stackoverflow에 대한 관련 질문을 참조하십시오 .


1

다음은 파일에 여러 줄을 추가하는 예입니다.

{
        echo '  directory "/var/cache/bind";'
        echo '  listen-on { 127.0.0.1; };'
        echo '  listen-on-v6 { none; };'
        echo '  version "";'
        echo '  auth-nxdomain no;'
        echo '  forward only;'  
        echo '  forwarders { 8.8.8.8; 8.8.4.4; };'
        echo '  dnssec-enable no;'
        echo '  dnssec-validation no;'
} >> your_file.txt

0

주요 답변 외에도 파일에 슈퍼 사용자 권한이 필요한 경우 sudo앞에 추가하면 echo작동하지 않습니다.

쉘이 명령을 깨뜨리고 echo루트로 실행되었지만 >>일반 권한으로 실행 되었기 때문 입니다.

이것은 수퍼 유저에게 효과적입니다. sudo su -c "echo 'Line 3' >> greetings.txt"


당신은 su여기 필요하지 않습니다 ( sudo su좋지 않습니다). 그러나 쉘 재 지정을 관리 할 무언가가 필요하다는 것은 옳다. 아마 sudo sh -c "echo stuff >> file.txt". 순 절약은 아니지만 더 나은 방법입니다.
roaima
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.