English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Linux sed 명령어

Linux 명령어大全

Linux sed 명령어는 스크립트를 사용하여 텍스트 파일을 처리합니다.

sed는 스크립트의 지시에 따라 텍스트 파일을 처리하고 편집할 수 있습니다.

sed는 주로 파일을 자동으로 편집하고, 파일에 대한 반복적인 작업을 간소화하고, 변환 프로그램을 작성하는 데 사용됩니다.

문법

sed [-hnV][-e<script>][-f<script 파일>][텍스트 파일]

파라미터 설명:

  • -e<script> 또는--expression=<script> : 입력 텍스트 파일을 처리하는 옵션 중에 지정된 script를 사용합니다.

  • -f<script 파일> 또는--file=<script 파일> : 입력 텍스트 파일을 처리하는 옵션 중에 지정된 script 파일을 사용합니다.

  • -h 또는--help : 도움말을 표시합니다.

  • -n 또는--quiet 또는--silent : script 처리 후 결과만 표시합니다.

  • -V 또는--version : 버전 정보를 표시합니다.

작업 설명:

  • a : 추가, a의 뒤에는 문자열을 추가할 수 있으며, 이 문자열은 현재의 다음 행에 추가됩니다~;

  • c : 대체, c의 뒤에는 문자열을 추가할 수 있으며, 이 문자열은 n을 대체할 수 있습니다;1,n2 의 행!

  • d : 제거, 제거이므로 d 뒤에는 어떤 것도 추가하지 않습니다;

  • i : 삽입, i의 뒤에는 문자열을 추가할 수 있으며, 이 문자열은 현재의 다음 행에 삽입됩니다;

  • p : 출력, 즉 특정 데이터를 인쇄합니다. 일반적으로 p는 sed와 함께 사용됩니다. -n 함께 실행하십시오~

  • s : 대체, 대체 작업을 직접 수행할 수 있습니다! 일반적으로 s 작업은 정규 표현식과 함께 사용됩니다. 예를 들어 1,20s/old/new/g 바로 그렇습니다!

온라인 예제

testfile 파일의 네 번째 행 후에 한 행을 추가하고, 결과를 표준 출력으로 출력하는 명령어를 명령 프롬프트에서 입력하십시오:

sed -e 4a\newLine 테스트 파일

먼저 testfile의 내용을 다음과 같이 확인하십시오:

$ cat testfile #testfile 파일의 내용을 확인  
HELLO LINUX!  
Linux는 무료 Unix입니다-운영 체제를 입력하십시오.  
이것은 linux 테스트 파일입니다!  
Linux test

sed 명령어 사용 후, 다음과 같은 출력 결과가 나타납니다:

$ sed -e 4a\newline 테스트 파일 #sed를 사용하여 네 번째 행 후에 새 문자열을 추가  
HELLO LINUX! #testfile 파일의 원래 내용  
Linux는 무료 Unix입니다-운영 체제를 입력하십시오.  
이것은 linux 테스트 파일입니다!  
Linux test  
newline

행 단위로 추가/삭제

추가 /etc/passwd의 내용을 나열하고 행 번호를 출력하며, 동시에 다음과 같이 출력하십시오: 2~5 줄을 삭제합니다!

[root@www ~]# nl /etc/passwd | sed '2,5d'
1 root:x:0:0:root:/root:/bin/bash
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
.....(이하 생략).....

sed의 작업은 '"2,5d'은 삭제라는 의미입니다! 왜냐하면 2-5 d'이 없기 때문에, 표시된 데이터는 없습니다 2-5 줄을 삭제했습니다. 따라서 표시된 데이터는 없습니다 -e만 맞습니다, 없습니다 -e도 됩니다! 또한 주의해야 할 것은, sed 뒤에 따르는 작업을 '' 두 개의 단락 기호로 감싸야 합니다!

만 삭제하면 됩니다 2 줄

nl /etc/passwd | sed '2d'

을 삭제합니다 3 마지막 줄까지

nl /etc/passwd | sed '3$d'

두 번째 줄 뒤(즉, 세 번째 줄에 추가)에『drink tea?』라는 텍스트를 추가합니다!

[root@www ~]# nl /etc/passwd | sed '2a drink tea'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
drink tea
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(이하 생략).....

그런 경우 두 번째 줄 앞에

nl /etc/passwd | sed '2i drink tea'

두 줄 이상 추가하려면, 두 번째 줄 뒤에 두 줄을 추가합니다. 예를 들어 Drink tea or ......drink beer?

[root@www ~]# nl /etc/passwd | sed '2a Drink tea or ......\
> drink beer ?'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
Drink tea or ......
drink beer ?
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(이하 생략).....

각 줄 사이에는 반대호침『 \ 』로 새 줄을 추가해야 합니다. 따라서, 위의 예제에서는 첫 번째 줄의 마지막에 \이 있습니다.

행 단위 대체 및 표시

을 대체합니다2-5줄의 내용을『No』로 대체됩니다 2-5 number』이에요?

[root@www ~]# nl /etc/passwd | sed '2,5c No 2-5 number'
1 root:x:0:0:root:/root:/bin/bash
No 2-5 number
6 sync:x:5:0:sync:/sbin:/bin/sync
.....(이하 생략).....

이 방법을 통해 데이터를 전체 줄로 대체할 수 있습니다!

제한적으로 나열 /etc/passwd 파일 내의 5-7 줄

[root@www ~]# nl /etc/passwd | sed -n '5,7p'
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

이 sed의 행 단위 표시 기능을 통해, 특정 파일 내의 일부 행 번호를 선택하여 표시할 수 있습니다.

데이터의 찾기 및 표시

검색 /etc/passwd에 root 키워드가 있는 줄

nl /etc/passwd | sed '/root/p'
1  root:x:0:0:root:/root:/bin/bash
1  root:x:0:0:root:/root:/bin/bash
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3  bin:x:2:2:bin:/bin:/bin/sh
4  sys:x:3:3:sys:/dev:/bin/sh
5  sync:x:4:65534:sync:/bin:/bin/sync
.... 무시

root가 찾으면, 모든 줄을 출력 외에도 일치하는 줄도 출력합니다.

사용-n이면 템플릿을 포함한 줄만 출력됩니다.

nl /etc/passwd | sed -n '/root/p'
1  root:x:0:0:root:/root:/bin/bash

데이터의 찾기 및 삭제

삭제/etc/passwd에 포함된 root 모든 줄, 다른 줄은 출력

nl /etc/passwd | sed  '/root/d'
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3  bin:x:2:2:bin:/bin:/bin/sh
.... 무시
# 첫 번째 줄의 매치 root가 삭제되었습니다

데이터의 찾기 및 명령 실행

검색/etc/passwd에서 root에 해당하는 행을 찾아, 괄호 내의 명령을 실행합니다. 명령 간에는 분号으로 구분합니다. 여기서 bash을 blueshell로 변경하고, 이 줄을 출력합니다:

nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q'    
1  root:x:0:0:root:/root:/bin/blueshell

마지막 q는 종료

데이터 탐색 및 대체

전체 행 처리 모드 외에도, sed는 행 단위로 일부 데이터를 탐색하고 대체할 수 있습니다. 기본적으로 sed의 탐색 및 대체는 vi와 매우 유사합니다! 그것은 다음과 같습니다:

sed 's/대체될 문자열/새로운 문자열/g'

원본 정보를 관찰하면, /sbin/ifconfig로 IP를 확인

[root@www ~]# /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
.....(이하 생략).....

이 기계의 IP는192.168.1.100。

IP 앞의 부분을 제거합니다

[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'
192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

그 다음은 이후의 부분을 제거하는 것이며, 즉: 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

IP 뒤의 부분을 제거합니다

[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
192.168.1.100

여러곳에서 편집

sed 명령어로 삭제/etc/passwd의 세 번째 줄부터 끝까지의 데이터를 검색하고, bash을 blueshell로 변경

nl /etc/passwd | sed -e '3$d' -e 's/bash/blueshell/'
1  root:x:0:0:root:/root:/bin/blueshell
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh

-e는 여러곳에서 편집을 의미하며, 첫 번째 편집 명령은 삭제/etc/passwd의 세 번째 줄부터 끝까지의 데이터를 검색하고, 두 번째 명령을 bash 대신 blueshell로 변경합니다.

파일 내용을 직접 수정(위험한 동작)

sed는 파일의 내용을 직접 수정할 수 있으며, 파이프 명령이나 데이터 스트림 재지향 명령을 사용하지 않아도 됩니다! 그러나 이 작업이 원본 파일을 직접 수정하기 때문에, 시스템 설정을 임의로 테스트하지 마세요! 정말로 파일 regular_express.txt를 사용하여 테스트해 보세요!

regular_express.txt 파일 내용如下:

[root@www ~]# cat regular_express.txt 
w3codebox.
google.
taobao.
facebook.
zhihu-
weibo-

sed를 사용하여 regular_express.txt 내 각 행의 마지막 문자가 .이면 !로 변경

[root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt
[root@www ~]# cat regular_express.txt 
w3codebox!
google!
taobao!
facebook!
zhihu-
weibo-

:q:q

regular_express.txt 마지막 행에 직접 sed를 사용하여 추가 # This is a test:

[root@www ~]# sed -i '$a # This is a test' regular_express.txt
[root@www ~]# cat regular_express.txt 
w3codebox!
google!
taobao!
facebook!
zhihu-
weibo-
# This is a test

由于 $는 마지막 행을 의미하며, a의 작업은 추가하는 것이므로, 파일 마지막에 추가됩니다 # This is a test!

sed의 -i 옵션을 사용하여 파일 내용을 직접 수정할 수 있습니다. 이 기능은 매우 유용합니다! 예를 들어, 당신이 100 만 행의 파일, 당신은 100 행에 일부 문자를 추가하면, 이 때 vim을 사용하면 발작할 수 있습니다! 파일이 너무 크기 때문입니다! 그럼 어떻게 합니까? sed를 사용하여 직접 수정하세요!/대체 기능, vim을 사용하지 않아도 됩니다!

Linux 명령어大全