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