sed를 사용하여 파일의 특정 줄 뒤에 주어진 줄을 추가하는 방법

sed를 사용하여 파일의 특정 줄 뒤에 주어진 줄을 추가하는 방법

bash 파일을 작성하고 sed를 사용하여 다른 파일을 편집하고 있습니다. 다음 줄 뒤에 새 줄을 추가하고 싶습니다.

echo "rpcallowip=127.0.0.1\n";

추가된 행은 다음과 같이 표시됩니다.

echo "rpcallowip=$webip\n";

새로운 출력은 example.conf다음과 같습니다

echo "rpcallowip=127.0.0.1\n";
echo "rpcallowip=10.0.0.1\n";

그림과 같이 줄이 " "로 유지되는 것이 중요합니다.

답변1

file콘텐츠가 포함된 파일이 있다고 가정해 보겠습니다.

text
text text
echo "rpcallowip=127.0.0.1\n";
text
text text

echo줄 뒤에 줄을 추가하려면 다음 명령을 사용하십시오 sed.

sed '/^echo "rpcallowip=127.0.0.1\\n";$/a\
echo "rpcallowip=$webip\\n";
' file

GNU 사용 sed:

sed '/^echo "rpcallowip=127.0.0.1\\n";$/a echo "rpcallowip=$webip\\n";' file

두 예 모두 먼저 텍스트를 추가하려는 텍스트 줄을 처음부터 끝까지 일치시킨 다음 명령 sed( "append")을 사용하여 a필요한 텍스트를 추가합니다 . 패턴과 삽입된 텍스트 모두에서 in을 한 번 더 이스케이프 \해야 합니다 \n(그리고 좀 더 현명하게 말하자면 패턴의 IP 주소에 있는 모든 점은 이어야 합니다 \.).

위 작업의 결과는 다음과 같습니다.

text
text text
echo "rpcallowip=127.0.0.1\n";
echo "rpcallowip=$webip\n";
text
text text

답변2

이름이 지정된 파일의 기존 줄 뒤에 sed줄을 추가하는 강력하고 간단한 방법은 다음 과 같습니다.echo "rpcallowip=$webip\n";echo "rpcallowip=127.0.0.1\n";example.conf

sed 's/echo "rpcallowip=127.0.0.1\\n";/echo "rpcallowip=127.0.0.1\\n";\necho "rpcallowip=$webip\\n";/' example.conf

실제로 개행 문자로 처리되는 것을 방지하려면 개행 문자 4개 중 3개를 \n백슬래시로 이스케이프해야 합니다 .\

이것이 당신이 달성하고 싶은 것입니까?

보다 관용적인 솔루션은 다음을 사용하는 것입니다.sed 그룹:

sed 's/\(echo "rpcallowip=127.0.0.1\\n";\)/\1\necho "rpcallowip=$webip\\n";/' example.conf

두 번째 예에서는 다음과 같이 나눕니다 sed.\(\)sed 그룹, \1이전에 분할된 첫 번째 그룹(이 경우 유일한 그룹)을 나타냅니다.

답변3

이 sed를 사용해 볼 수도 있습니다.

webip='10.0.0.1'
sed -E '
h
s/(echo "rpcallowip=)([0-9.]*)(.*)/\1'"$webip"'\3/
tA
b
:A
x
p
x
' infile

관련 정보