파일 끝에 추가하려면 "sed"를 사용하십시오.

파일 끝에 추가하려면 "sed"를 사용하십시오.

저는 현재 sedfrom 을 사용하고 있습니다. 호출하는 사용자가 파일에 쓸 수 있는 권한이 없는 bash 스크립트 제한을 우회하기 위해 stdin이 스크립트를 사용하고 있습니다.sedecho "..." >> outputfile.conf

이게 내 목적이야글쓰기파일로:

echo "<VirtualHost *:80>
    ...
</VirtualHost>" | sudo sed -n "w/etc/apache2/sites-available/000-default.conf"

다음에 무엇을 해야 합니까?추가의같은 파일에?

if $enable_ssl; then
    echo "<VirtualHost *:443>
        ...
    </VirtualHost>" | sudo sed <opions-to-sed-here>
fi

답변1

>더 높거나 다른 권한을 가진 쉘에 대한 일반적인 대안은 다음과 같습니다.

echo "replace file content with this line" | sudo tee protectedFile >/dev/null

추가하려면 다음을 사용하십시오 -a.

echo "append this line to file" | sudo tee -a protectedFile >/dev/null

답변2

아니요 echo:

string=$'"<VirtualHost *:443> \
        ... \
    </VirtualHost>"'

sudo sed -i '$a\'"${string}"'' file

-i옵션은 sed파일이 그 자리에서 처리되도록 지시합니다(선택적으로 원본 버전에 접미사 추가).

sed 스크립트:

  1. $마지막 줄 일치
  2. a\일치하는 줄 뒤에 텍스트 추가

그러나 빈 파일에서는 작동하지 않습니다(마지막 줄과 일치하는 입력 줄이 없기 때문입니다).

답변3

완전성을 위해 ed다음 사항을 보유하고 있는 경우:

echo "$
a
<VirtualHost *:80>
...
</VirtualHost>
.
w" | sudo ed protectedFile
  1. $마지막 줄로 이동
  2. a추가하고 이어서 추가할 데이터를 입력하며 단일 점이 포함된 줄로 끝납니다.
  3. w대표하다쓰다(파일)

처음 두 명령은 연결(생성 $a)할 수 있지만 빈 파일에서는 작동하지 않습니다. 단독으로는 작동합니다."마지막 줄로 이동"(무작동) 그런 다음"추가의"대신에"마지막 줄에 추가", 실제로는 존재하지 않습니다.

관련 정보