2011-10-26 8 views
3

이 파일 I 텍스트 S2와 ServerAlias에 처음 발견 한 후 새 줄을 추가 할나오지 append 줄은

ServerName * 
ServerAlias * 
ServerAlias * 

<Directory> 

되세요. 나는 다음과 같은

sed '/ServerAlias/ a\S2\' foo 

시도하지만이 모든 발생 후 추가합니다.

내 최종 결과가 사실

ServerName * 
ServerAlias * 
S2 
ServerAlias * 

<Directory> 

답변

5

해야한다, 그것은 나오지도 아니에요,하지만 어쩌면 AWK는 당신을 도울 수 있습니다.

$> cat ./file 
ServerName * 
ServerAlias * 
ServerAlias * 

<Directory> 

$> awk '{print} /^ServerAlias/ && !n {print "S2"; n++}' ./file 
ServerName * 
ServerAlias * 
S2 
ServerAlias * 

<Directory> 

UPD : 실수가 수정되었습니다 감사는

+1

주석에 "ServerAlias"와 일치하지 않게하려면 regexp를 고정해야합니다. –

+1

일치하는 행을 두 번 인쇄하지 않으려면 다음을 사용하십시오 :'awk '{print}/^ ServerAlias ​​/ &&! n {print "S2"; n ++} '파일' –

+0

수정 됨. 큰 관찰에 감사드립니다. –

1

AWK 솔루션은 위의 최선을 glenn_jackman하지만 당신이 정말로 (GNU)에서 작업을 수행하려는 경우 다음 트릭을 수행 나오지 :

sed '0,/^ServerAlias.\+/s//\0\nS2/' file 

신용장은 the sed FAQ입니다.

+0

명령을 여러 번 반복하면 버그가 있습니다. 아마, 그것은 운영 체제 lindendings에 따라 다릅니다. 대신 ServerAlias를 추가하기 위해 ServerName을 대상으로 사용했습니다. –

+0

잠재적 인 줄 끝 문제와 관련 : http://stackoverflow.com/questions/6111679/insert-linefeed-in-sed – cmbuckley