2016-07-22 1 views
0

sed를 사용하여 ports.conf 파일에서 Listen 80을 편집하려고합니다. | 머리 -n1 sed_test :이 명령sed를 사용하여 Apache 포트 파일 수정

Listen 80 

<IfModule ssl_module> 
    Listen 443 
</IfModule> 

<IfModule mod_gnutls.c> 
    Listen 443 
</IfModule> 

:

해당 파일 같은 외모 때문에 sed -i -e 's/Listen [0-9] +/Listen 80/1p'sed_test

파일에서 'Listen $ port_number'가 모두 변경됩니다. 나는 두 번째 명령에서 파일을 지정했기 때문이라고 생각합니다.

지정하지 않으면 파일을 쓸 파일에 대해 sed: no input files이라는 논리적 인 오류가 발생합니다.

나는 그것이 sed로만 수행 될 수 있다는 것을 알고 있지만, 한 줄만 편집하고 그것을 내 사용자 지정 값으로 대체하는 방법을 잘 모르겠습니다. ->

Listen 8080 

    <IfModule ssl_module> 
     Listen 443 
    </IfModule> 

    <IfModule mod_gnutls.c> 
     Listen 443 
    </IfModule> 

방법

나오지 -i -e some_command/8080 파일

고양이 파일를 들어 :

그래서 이것이 내가 성취하고자하는 것입니다 그렇게?

답변

1

될 수 있습니다 표준 완료 sed :

sed '/Listen/{s/\([0-9]\+\)/8080/; :a;n; ba}' file 
1

당신이 gnu sed를 사용하는 경우 다음을 사용할 수 있습니다

sed -i '0,/Listen [0-9]*/s//Listen 8080/' file 

Listen 8080 

<IfModule ssl_module> 
    Listen 443 
</IfModule> 

<IfModule mod_gnutls.c> 
    Listen 443 
</IfModule> 

당신이 gnu sed이없는 경우 다음 awk를 사용할 수있는 경우에만 첫 번째 인스턴스를 대체 :

awk '!p{ p=sub(/Listen [0-9]*/, "Listen 8080") } 1' file 

Listen 8080 

<IfModule ssl_module> 
    Listen 443 
</IfModule> 

<IfModule mod_gnutls.c> 
    Listen 443 
</IfModule> 
+1

그게 내가 필요한 것입니다. :-) 고마워요! – fugitive

+0

[이 답변의 왼쪽 상단에 ** 체크 표시 **를 클릭하여 대답을 표시 할 수 있습니다] (http://meta.stackexchange.com/a/5235/160242) – anubhava

관련 문제