>  기사  >  운영 및 유지보수  >  한 기사에서 쉘 프로그래밍의 세 검객 중 한 사람의 sed 명령을 이해하십시오.

한 기사에서 쉘 프로그래밍의 세 검객 중 한 사람의 sed 명령을 이해하십시오.

齐天大圣
齐天大圣원래의
2020-09-17 17:27:451704검색

쉘 프로그래밍의 세 검객 중 하나로서 sed의 중요성은 자명합니다. sed는 한 번에 한 줄씩 처리하고, 처리 후 다음 줄을 처리하는 스트림 프로그래머입니다. 정규식을 지원하며 매우 강력합니다. 그러나 sed는 일반 명령보다 더 복잡하고 많은 옵션이 있습니다. 다양한 예시를 통해 이 강력한 sed 명령의 역할을 살펴보겠습니다!

구문 형식: sed [옵션] [동작]

일반적으로 사용되는 옵션은 다음과 같습니다.

  • -n: sed는 기본적으로 모든 표준 입력 내용을 출력하지만, 이 옵션을 추가한 후에는 sed에서 처리한 줄만 출력합니다. 표시됩니다.

  • -e: 동일한 줄에서 여러 작업을 수행할 수 있도록 허용합니다.

  • -f: 파일에서 작업을 읽습니다.

  • -i: 파일을 화면에 입력하는 대신 직접 수정합니다(위험).

작업에 매개변수가 너무 많습니다. 목록은 다음과 같습니다.

  • a: 일치하는 줄 아래에 줄을 추가합니다.

  • c: 새 콘텐츠로 일치하는 줄을 수정합니다.

  • d: 일치하는 줄 삭제

  • i: 일치하는 줄 앞에 내용 추가

  • p: 인쇄

  • s: 일치하는 줄의 내용 바꾸기

예 1: 5번째 줄 인쇄 /etc/passwd 파일 -10줄

# sed -n '5,10p' /etc/passwd
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

예 2: /etc/passwd 파일의 2행, 2~10행

# cat -n /etc/passwd | sed '2d' | sed '5,10d'

위의 방법 외에도 다음을 사용할 수 있습니다. -e 옵션을 사용하여 완료

# cat -n /etc/passwd | sed -e '2d' -e '5,10d'

예 3: 서버 IP 주소 가져오기

이 사례는 매우 좋습니다. 자세히 살펴보시기 바랍니다.

# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.26.9.143  netmask 255.255.240.0  broadcast 172.26.15.255
        ether 00:16:3e:0a:01:ad  txqueuelen 1000  (Ethernet)
……

우리에게 필요한 것은 172.26.9.143입니다.

첫 번째 단계는 처리하려는 라인을 가져오는 것입니다

# ifconfig eth0 | sed -n &#39;/.*inet/p&#39;
        inet 172.26.9.143  netmask 255.255.240.0  broadcast 172.26.15.255

두 번째 단계는 불필요한 정보를 공백 문자로 바꾸는 것입니다

# ifconfig eth0 | sed -n &#39;/.*inet/p&#39; | sed &#39;s/.*inet\s\+//g&#39;
172.26.9.143  netmask 255.255.240.0  broadcast 172.26.15.255

그런 다음 IP 주소 뒤의 공백을 모두 공백으로 바꿉니다

# ifconfig eth0 | sed -n &#39;/.*inet/p&#39; | sed &#39;s/.*inet\s\+//g&#39; | sed &#39;s/\s\+.*//g&#39;
172.26.9.143

다음에 대해 이야기해 보겠습니다. 위의 예에 대해 먼저 첫 번째 단계에서는 -n 및 p를 사용하여 원하는 행을 가져옵니다. 그런 다음 불필요한 정보를 필터링합니다. 정규식에서 s+는 최소한 하나의 공백과 일치한다는 의미이지만 여기서는 더하기 기호 앞에 이스케이프 문자를 사용해야 합니다.

예시 4

마지막 예로 어제 제가 겪은 실제 사례를 들려드리겠습니다. 요구 사항은 다음과 같습니다. 텍스트로 URL 주소를 가져오지만 이전 http://는 필요하지 않습니다. 텍스트 내용의 일부는 다음과 같습니다.

  <td width=820> <a href=http://beijing.hellozx.com onclick="co(&#39;beijing&#39;)"><font color="red">北京</font></a>
     <a href=http://shanghai.hellozx.com onclick="co(&#39;shanghai&#39;)"><font color="red">上海</font></a>
     <a href=http://tianjin.hellozx.com onclick="co(&#39;tianjin&#39;)"><font color="red">天津</font></a>
     <a href=http://chongqing.hellozx.com onclick="co(&#39;chongqing&#39;)"><font color="red">重庆</font></a></td></tr>
<tr><td width=80 height=30 align=right>
<b><font style="font-size:14px;">山东</font>:</b> </td><td width=820>
 <a href="http://jinan.hellozx.com" onclick="co(&#39;jinan&#39;)"><font color=red style="font-size:14px;">济南</font></a>
 <a href="http://qingdao.hellozx.com" onclick="co(&#39;qingdao&#39;)"><font color=red style="font-size:14px;">青岛</font></a>

여러 단계를 거쳐 이 요구 사항을 완료해 보겠습니다. 먼저 URL 주소가 포함되지 않은 모든 줄을 필터링합니다.

# sed -n &#39;/http:/p&#39; a.txt

그런 다음 불필요한 정보를 모두 공백 문자로 바꿉니다. 먼저 http://와 그 앞의 모든 문자

sed -n &#39;/http:/p&#39; a.txt | sed &#39;s/.*http:\/\///g&#39;

를 삭제한 다음 큰따옴표와 그 뒤의 문자를 모두 삭제하세요

# sed -n &#39;/http:/p&#39; a.txt | sed 's/.*http:\/\///g' | sed 's/".*//g'

이제 화면 출력은 다음과 같습니다

haikou.hellozx.com sanya.hellozx.com kunming .hellozx.com dali.hellozx.com xining.hellozx.com yinchuan.hellozx.com wulumuqi.hellozx.com ......

위 내용은 한 기사에서 쉘 프로그래밍의 세 검객 중 한 사람의 sed 명령을 이해하십시오.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.