링크 ux 기본 명령 소개 10: 텍스트 흐름 편집 sed
vim
와 달리 sed
는 비 상호작용 적 인 텍스트 편집기 이 며, 동시에 문자 흐름 을 대상 으로 하 며, 줄 마다 데이터 sed
를 처리 한 후 출력 합 니 다.sed [OPTION]... [script] [file]...
sed
의 작업 과정 은 다음 과 같다. 우선, 두 개의 데이터 버퍼
와
를 초기 화한 다.sed
한 줄 의 입력 (표준 입력 이나 파일 에서 온 것) 을 읽 고 끝 에 있 는 줄 바 꿈 문자 () 를 제거 한 다음 에 모델 공간 에 있 는 문자열 에 대해 'sed 명령' 을 실행 하기 시작 합 니 다. 모든 명령 은
와 관련 이 있 고 주 소 는 조건 으로 볼 수 있 으 며 조건 이 성립 될 때 만 관련 명령 이 실 행 됩 니 다.모든 실행 가능 한 명령 이 처 리 된 후에 도 패턴 공간 에 있 는 문자열 은 줄 바 꿈 자 를 추가 해서 출력 합 니 다.이후 다음 줄 의 입력 을 읽 고 같은 처 리 를 합 니 다. 주동 적 으로 종료 하거나 입력 이 끝 날 때 까지.주소.
다음 과 같은 형식 일 수 있다.1.
number
줄 번호 2, first~step
는 first (숫자) 줄 에서 시작 하여 step (숫자) 줄 마다 3, $
마지막 줄 을 표시 합 니 다.% 다른 단일 문자 로 바 꿀 수 있 습 니 다.(regexp 에 사선/을 포함 하 는 경우) 6, /regexp/
정규 표현 식 regexp 와 일치 할 때 대소 문자 7 을 구분 하지 않 고 /regexp/I
정규 다 중 줄 모드 를 사용 하여 $가 줄 끝 뿐만 아니 라\r 이전 위치 도 일치 하도록 합 니 다.^ 줄 의 첫 번 째 뿐만 아니 라\r 뒤의 위치 도 일치 합 니 다.이 때 모드 공간의 시작 위 치 를 (\) 일치 시 키 고 (\) 일치 하 는 모드 공간의 끝 위 치 를 사용 할 수 있 습 니 다.쉼표
/regexp/M
로 두 주 소 를 나 누 어 한 범 위 를 표시 할 수도 있다.두 번 째 주소 나 파일 이 끝 날 때 까지 첫 번 째 주소 와 일치 하 는 것 을 표시 합 니 다.두 번 째 주소 가 정규 표현 식 이 라면 첫 번 째 주소 매 칭 줄 에 두 번 째 주소 매 칭 을 하지 않 습 니 다.두 번 째 주소 가 줄 번호 이지 만 첫 번 째 주소 가 줄 번호 와 일치 하거나 같 으 면 한 줄 만 일치 합 니 다 (첫 번 째 주소 가 줄 과 일치 합 니 다).
8.
,
이 경우 정규 표현 식 regexp 는 첫 줄 에서 일치 합 니 다.두 번 째 주소 가 정규 표현 식 일 때 만 첫 번 째 주 소 는 0 을 사용 할 수 있 습 니 다.9. 0,/regexp/
주소 addr 1 과 그 후의 n 줄 을 표시 합 니 다.10. addr1,+n
는 일치 하 는 주소 addr 1 부터 n 의 배수 줄 까지 표시 합 니 다.주 소 를 주지 않 으 면 모든 줄 이 일치 합 니 다.주소 나 주소 범위 에 추가 문자 addr1,~n
는 주소 에 대한 반 대 를 표시 하고 일치 하지 않 는 모든 줄 이 처 리 됩 니 다.옵션
!
기본적으로 줄 마다 처 리 된 문자열 이 출력 됩 니 다. 이 옵션 은 기본 동작 을 닫 는 것 을 표시 합 니 다.명령 -n
역할 을 하 는 문자열 만 출력 됩 니 다.p
는 file 에서 sed 명령 을 읽 는 것 -f file
은 제자리 에서 수정 하 는 것 을 나타 낸다.이 옵션 을 사용 하면 -i
임시 파일 을 만 들 고 처리 결 과 를 이 파일 로 출력 합 니 다. 처리 가 완료 되면 이 임시 파일 을 원본 파일 로 덮어 씁 니 다.sed
확장 정규 표현 식 사용명령 하 다.
-r
인쇄 모드 공간 내용 을 표시 하고 보통 옵션 p
과 함께 사용 합 니 다.[root@centos7 ~]# seq 5
1
2
3
4
5
[root@centos7 ~]#
[root@centos7 ~]# seq 5|sed -n '2,4p'
2
3
4
[root@centos7 ~]#
-n
모드 공간 내용 을 삭제 하고 다음 줄 의 입력 을 즉시 처리 합 니 다.#
[root@centos7 ~]# seq 5|sed '$d'
1
2
3
4
[root@centos7 ~]#
d
즉시 종료 하고 명령 과 입력 을 처리 하지 않 습 니 다 (단일 주소 만 받 습 니 다)[root@centos7 ~]# seq 5|sed '/3/q'
1
2
3
[root@centos7 ~]#
q
옵션 n
을 사용 하지 않 으 면 출력 모드 공간 에 있 는 내용 을 읽 은 후 다음 줄 의 입력 을 읽 고 현재 모드 공간 내용 을 덮어 씁 니 다.더 많은 입력 줄 이 없 으 면 sed 는 실행 을 종료 합 니 다.[root@centos7 ~]# seq 9|sed -n 'n;p'
2
4
6
8
[root@centos7 ~]#
-n
replacement 으로 패턴 공간 에 정규 표현 식 regexp 와 일치 하 는 부분 을 표시 합 니 다.여기 서 기호 s/regexp/replacement/flag
는 임의의 단일 문자 로 바 꿀 수 있다.[root@centos7 ~]# echo "hello123world"|sed 's/[0-9]\+/,/'
hello,world
# + , -r
replacement 에서
1. (n 은 1 - 9 의 숫자) 정규 표현 식 의 그룹
/
에 대한 인용 을 나타 낸다.[root@centos7 ~]# echo "hello123world"|sed -r 's/[a-z]+([0-9]+)[a-z]+/\1/'
123
[root@centos7 ~]# echo "hello123world"|sed -r 's/([a-z]+)[0-9]+([a-z]+)/\1,\2/'
hello,world
2.
(...)
모드 공간 에서 regexp 와 일치 하 는 모든 부분 을 나타 낸다.[root@centos7 ~]# echo "hello123world"|sed -r 's/[0-9]+/:&:/'
hello:123:world
3.\L 은 뒤에 있 는 문 자 를 소문 자로 바 꾸 어\U 또는\E 가 나타 날 때 까지 합 니 다.4.\l 다음 문 자 를 소문 자로 바 꿉 니 다.5.\U 는 뒤의 문 자 를 대문자 로 바 꾸 어\L 또는\E 가 나타 날 때 까지 합 니 다.6.\u 는 다음 문 자 를 대문자 로 바 꿉 니 다.7.\\E 는\L 또는\U 에서 시작 하 는 대소 문자 전환 을 중단 합 니 다.
[root@centos7 ~]# echo "hello123world"|sed -r 's/^([a-z]+)[0-9]+([a-z]+)$/\U\1\E,\u\2/'
HELLO,World
[root@centos7 ~]#
flag
1.
&
숫자 n 은 n 번 째 일치 항목 을 교체 하 는 것 을 나타 낸다.[root@centos7 ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
#
[root@centos7 ~]# head -1 /etc/passwd|sed 's/[^:]\+://5'
root:x:0:0:/root:/bin/bash
2.
n
전체 국면 교 체 를 나타 낸다.[root@centos7 ~]# echo "hello123world"|sed 's/./\U&\E/'
Hello123world
[root@centos7 ~]#
[root@centos7 ~]# echo "hello123world"|sed 's/./\U&\E/g'
HELLO123WORLD
[root@centos7 ~]#
# n g , n
[root@centos7 ~]# head -1 /etc/passwd|sed 's/[^:]\+://4g'
root:x:0:/bin/bash/
3.
g
교체 에 성공 하면 인쇄 모드 공간 내용 을 표시 합 니 다.4. p
교체 에 성공 하면 출력 모드 공간 내용 을 파일 file 에 표시 합 니 다.5. w file
와 I
는 regexp 와 일치 할 때 대소 문 자 를 구분 하지 않 습 니 다.[root@centos7 ~]# echo 'HELLO123world'|sed -r 's/[a-z]+//Ig'
123
[root@centos7 ~]#
6.
i
와 M
는 정규 다 중 줄 모드 를 사용 하 는 것 을 나타 낸다 (앞에서 말 한 바 와 같다).(명령 을 말 할 때 m
예 를 들 어)N
source - chars 의 문 자 를 dest - chars 에 대응 하 는 위치 문자 로 바 꿀 수 있 습 니 다. y/source-chars/dest-chars/
다른 임의의 단일 문자 로 바 꿀 수 있 습 니 다. source - chars 와 dest - chars 의 문자 수 는 일치 해 야 하 며 정규 표현 식 을 사용 할 수 없습니다.[root@centos7 ~]# echo hello|sed 'y/el/LE/'
hLEEo
[root@centos7 ~]#
/
출력 모드 공간 내용 표시 후 텍스트 내용 추가 출력[root@centos7 ~]# seq 3|sed '1,2a hello'
1
hello
2
hello
3
[root@centos7 ~]#
a text
출력 모드 공간 내용 을 표시 하기 전에 text 내용 을 출력 합 니 다.[root@centos7 ~]# seq 3|sed '$ihello'
1
2
hello
3
[root@centos7 ~]#
i text
일치 하 는 주소 나 주소 범위 의 패턴 공간 내용 을 삭제 하고 text 내용 을 출력 합 니 다.단일 주소 라면 일치 하 는 줄 마다 출력 하고 주소 범위 라면 한 번 만 출력 합 니 다.[root@centos7 ~]# seq 5|sed '1,3chello'
hello
4
5
[root@centos7 ~]# seq 5|sed '/^[^3-4]/c hello'
hello
hello
3
4
hello
c text
현재 입력 줄 번 호 를 인쇄 하 는 것 을 표시 합 니 다.[root@centos7 ~]# seq 100|sed -n '$='
100
[root@centos7 ~]# seq 100|sed -n '/^10\|^20/='
10
20
100
[root@centos7 ~]# |
=
file 의 내용 을 읽 고 현재 모드 공간 내용 을 출력 한 후에 출력 합 니 다.[root@centos7 ~]# cat file
hello world
[root@centos7 ~]# seq 3|sed '1,2r file'
1
hello world
2
hello world
3
[root@centos7 ~]#
r file
출력 모드 공간 내용 을 file 에 표시 합 니 다.w file
한 줄 의 내용 을 모드 공간 으로 읽 은 다음 에 다음 줄 의 내용 을 모드 공간 (이때 모드 공간 에서 line1line 2 와 같은 내용 형) 에 추가 하고 다음 줄 이 존재 하지 않 으 면 N
종료 합 니 다.[root@centos7 ~]# seq 10|sed -n 'N;s/
/ /p'
1 2
3 4
5 6
7 8
9 10
[root@centos7 ~]#
#s m flag
[root@centos7 ~]# seq 3|sed 'N;s/^2/xxx/'
1
2
3
[root@centos7 ~]# seq 3|sed 'N;s/^2/xxx/m'
1
xxx
3
[root@centos7 ~]# seq 3|sed 'N;s/1$/xxx/'
1
2
3
[root@centos7 ~]# seq 3|sed 'N;s/1$/xxx/M'
xxx
2
3
sed
모드 공간 에 새 줄 (예 를 들 어 명령 D
이 생 긴 새 줄) 이 없 으 면 명령 N
과 같은 역할 을 한다.새 줄 이 포함 되면 첫 줄 의 내용 을 삭제 하고 모드 공간 에 남 은 내용 을 다시 시작 합 니 다.(주의: D 뒤의 명령 은 무 시 됩 니 다)[root@centos7 ~]# seq 5|sed 'N;D'
5
[root@centos7 ~]# seq 5|sed 'N;N;D'
3
4
5
d
인쇄 모드 공간 에서 첫 줄 내용[root@centos7 ~]# seq 10|sed -n 'N;P'
1
3
5
7
9
[root@centos7 ~]# seq 10|sed -n 'N;N;P'
1
4
7
#
[root@centos7 ~]# seq 10|sed -n '1~3P'
1
4
7
10
P
공간 에 있 는 내용 으로 모드 공간 에 있 는 내용 을 교체 합 니 다.[root@centos7 ~]# seq 5|sed -n 'g;N;s/
/xx/p'
xx2
xx4
[root@centos7 ~]#
g
줄 바 꿈 자 를 모드 공간 에 추가 한 다음 에 공간 에 있 는 내용 을 줄 바 꿈 자 에 추가 합 니 다.(이때 모드 공간 에서 PATTERNHOLD 와 같은 내용 형)[root@centos7 ~]# seq 5|sed 'G;s/
/xx/'
1xx
2xx
3xx
4xx
5xx
G
모드 공간의 내용 으로 공간 에 있 는 내용 을 교체 합 니 다 (이때 모드 공간의 내용 이 삭제 되 지 않 았 음 을 주의 하 십시오)[root@centos7 ~]# seq 5|sed -n 'h;G;s/
/xx/p'
1xx1
2xx2
3xx3
4xx4
5xx5
[root@centos7 ~]# seq 5|sed -n 'h;G;G;s/
/xx/gp'
1xx1xx1
2xx2xx2
3xx3xx3
4xx4xx4
5xx5xx5
h
줄 바 꿈 자 를 추가 하여 공간 을 유지 한 다음 에 패턴 공간의 내용 을 줄 바 꿈 자 에 추가 합 니 다.(이 때 HOLDPATTERN 과 같은 공간 내용 을 유지 합 니 다)[root@centos7 ~]# seq 3|sed -n 'H;G;s/
/xx/gp'
1xxxx1
2xxxx1xx2
3xxxx1xx2xx3
[root@centos7 ~]#
H
교환 모드 공간 과 공간 유지 내용[root@centos7 ~]# seq 9|sed -n '1!{x;N};s/
//p'
3
25
47
69
# {...}
x
분기 명령 에 탭 위 치 를 지정 합 니 다 (주소 일치 허용 하지 않 음): label
무조건 label 분기 로 이동 합 니 다. label 을 생략 하면 전체 명령 의 끝 으로 이동 합 니 다 (즉, 다음 읽 기 시작)# xml ( , )
sed '//!{N;ba};d}' server.xml
# N, -->
# nagios , define host{...} , :
define host{
use windows-server
host_name serverA
hostgroups 060202
alias 060202
contact_groups yu
address 192.168.1.1
}
# ip 192.168.1.1 , :
sed -i '/define host/{:a;N;/}/!ba;/192\.168\.1\.1/d}' file
#
b label
한 번 입력 한 후에 성공 적 으로 실 행 된 t label
교체 명령 이 있어 야 label 로 넘 어 갑 니 다. label 을 생략 하면 전체 명령 의 끝 (즉 다음 읽 기 시작) 으로 넘 어 갑 니 다.#
[root@centos7 ~]# seq 10|sed ':a;$!N;s/
/,/;ta'
1,2,3,4,5,6,7,8,9,10
[root@centos7 ~]#
# MAC 78A35114F798 78:A3:51:14:F7:98
[root@centos7 temp]# echo '78A35114F798'|sed -r ':a;s/\B\w{2}\b/:&/;ta'
78:A3:51:14:F7:98
[root@centos7 temp]#
# \b ,\B
# :
[root@centos7 temp]# echo '78A35114F798'|sed -r 's/..\B/&:/g'
78:A3:51:14:F7:98
[root@centos7 temp]#
s
한 번 입력 한 후 교체 명령 이 성공 적 으로 실행 되 지 않 으 면 label 로 이동 합 니 다. label 을 생략 하면 전체 명령 의 끝 으로 이동 합 니 다 (즉, 다음 읽 기 시작)T label
모드 공간의 내용 을 제거 하고 z
와 같은 역할 을 하지만 더욱 효과 적 임 을 나타 낸다.더 많은 예
1. 일치 하 는 줄 의 이전 줄 과 다음 줄 삭제
# seq 10 ( )
# 5
[root@centos7 temp]# seq 10|sed -n '$!N;/
5/{s/.*
//p;N;d};P;D'
1
2
3
5
7
8
9
10
2. 홀수 줄 병합
# seq 11 ,
# `1 3 5 7 9 11`, `2 4 6 8 10`
[root@centos7 ~]# seq 11|sed -nr '$!N;2!G;s/([^
]+)
((.+)
)?(.+)
(.+)/\4 \1
\5 \3/;h;$p'
1 3 5 7 9 11
2 4 6 8 10
[root@centos7 ~]#
3. 다 중 파일 통합
# a.txt :
01 12510101 4001
02 12310001 4002
03 12550101 4003
04 12610001 4004
05 12810001 4005
06 12310001 4006
07 12710001 4007
08 12310001 4008
09 12810101 4009
10 12510101 4010
11 12310001 4011
12 12610001 4012
13 12310001 4013
# b.txt :
A 12410101 2006/02/15 2009/01/31 4002
B 12310001 2006/08/31 2008/08/29 4001
C 12610001 2008/05/23 2008/05/22 4002
D 12810001 1992/12/10 1993/06/30 4001
E 12660001 1992/05/11 1993/06/01 4005
# a.txt b.txt , b.txt 。
# :02 12310001 4002 2006/08/31 2008/08/29
sed -rn '/^[01]/ba;H;:a;G;s/^((..)( .*)( [^
]+)).*\3(( [^ ]*){2}).*/\1\5/p' b.txt a.txt
# awk , :
awk 'NR==FNR{a[$2]=$3FS$4;next}{if($2 in a)print $0,a[$2]}' b.txt a.txt
sed 의 각종 명령 특성 에 대한 이 해 를 강화 하기 위해 서 이 세 가지 예 를 스스로 분석 하 십시오.
각종 명령 의 조합 사용 에 정규 표현 식 의 강력 한 능력 을 더 해
s/.*//
계산 할 수 있 는 모든 문 제 를 처리 할 수 있 습 니 다.그러나 코드 의 가 독성 이 강하 지 않 아 이해 하기 가 어렵 기 때문에 보통 sed
을 텍스트 편집기 로 사용 하여 텍스트 에 대해 비 상호작용 적 인 흐름 처 리 를 한다.상기 각 명령 의 의 미 를 이해 하고 능숙 하 게 사용 하면 sed
의 강 한 점 을 발견 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Linux Makinalarda NFS Sunucu Mount Etme(데비안 및 RPM)Debian은 Red Hat 탭과 Linux NFS Sunucu 라이브러리를 모두 지원합니다. NFS 지불 방법은 클라이언트 제작자가 사용하지 않는 기본 설정을 유지하는 것입니다. Örnek verecek olurs...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.