셸 스 크 립 트 의 정규 표현 식 (2) --- sed 도구
sed 는 강력 하고 간단 한 텍스트 해석 변환 도구 로 텍스트 를 읽 을 수 있 으 며 지정 한 조건 에 따라 텍스트 내용 을 편집 (삭제, 교체, 추가, 이동 등) 하고 마지막 으로 모든 줄 을 출력 하거나 출력 만 처리 하 는 일부 줄 입 니 다.sed 도 상호작용 이 없 는 상황 에서 상당히 복잡 한 텍스트 처리 작업 을 실현 할 수 있 고 Shell 스 크 립 트 에 널리 응용 되 어 각종 자동화 처리 임 무 를 완성 할 수 있 습 니 다.
sed 작업 절차
1. 읽 기: sed 는 입력 흐름 (파일, 파이프, 표준 입력) 에서 한 줄 의 내용 을 읽 고 임시 버퍼 에 저장 합 니 다.2. 실행: 기본적으로 모든 sed 명령 은 패턴 공간 에서 순서대로 실 행 됩 니 다. 줄 의 주 소 를 지정 하지 않 으 면 sed 명령 은 모든 줄 에서 순서대로 실 행 됩 니 다.3. 디 스 플레이: 수 정 된 내용 을 출력 흐름 으로 보 냅 니 다.데 이 터 를 보 내 면 모드 공간 이 비 워 집 니 다.
sed 명령 용법
sed[ ] ' '
sed [ ] -f scriptfile
일반적인 sed 명령 옵션
-e --expression=: 。
-f --file=: 。
-h --help: 。
-n、--quiet silent: 。
-i: 。
'조작' 은 파일 작업 에 대한 동작, 즉 sed 명령 을 지정 하 는 데 사 용 됩 니 다.일반적으로 'n1 [, n2]' 조작 매개 변수 형식 을 사용 합 니 다.n1, n2 는 선택 할 수 있 는 것 으로 반드시 존재 하 는 것 이 아니 라 조작 할 줄 수 를 선택 하 는 것 을 대표 합 니 다.
일반적인 조작 옵션
a: , 。
c: , 。
d: , 。
i: , 。
p: , , ; , ; , ASCII 。 “-n” 。
s: , 。
y: 。
프 리 젠 테 이 션
1. 조건 에 맞 는 텍스트 출력 (p 는 정상 출력 표시)
[root@localhost opt]# sed -n 'p' /etc/passwd // , cat
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
......
sed -n '5p' /etc/passwd // 5
sed -n '3,5p' /etc/passwd // 3 5
sed -n 'p;n' /etc/passwd // ,n
sed -n 'n;p' /etc/passwd //
sed -n '1,5{p;n}' /etc/passwd // 1~5
sed -n '22,${n;p}' /etc/passwd // 22
이상 은 sed 명령 의 기본 용법 입 니 다. sed 명령 이 정규 표현 식 과 결합 할 때 형식 이 약간 다 르 고 정규 표현 식 은 '/' 로 둘러싸 여 있 습 니 다.
sed 명령 과 정규 표현 식 을 결합 하여 사용 합 니 다.
[root@localhost opt]# sed -n '/sbin/p' /etc/passwd // sbin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
......
[root@localhost opt]# sed -n '2,/sbin/p' /etc/passwd // 2 sbin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost opt]# sed -n '/sbin/=' /etc/passwd // sbin , (=)
2
3
4
5
6
7
8
......
[root@localhost opt]# sed -n '/^ssh/p' /etc/passwd // ssh
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
[root@localhost opt]# sed -n '/[0-9]$/p' test.txt //
PI=3.141592653589793238462643383249901429
[root@localhost opt]# sed -n '/\/p' test.txt // wood ,\
a wood cross!
2. 조건 에 맞 는 텍스트 (d) 아래 명령 에서 nl 명령 을 삭제 하여 파일 의 줄 수 를 계산 하고 이 명령 과 결합 하면 명령 이 실 행 된 결 과 를 더욱 직관 적 으로 볼 수 있 습 니 다.
nl test.txt | sed '3d' // 3
nl test.txt | sed '3,5d' // 3~5
nl test.txt |sed '/cross/d' // cross
sed '/^[a-z]/d' test.txt //
sed '/\.$/d' test.txt // "."
sed '/^$/d' test.txt //
[root@localhost opt]# nl test.txt | sed '3,5d'
1 he was short and fat.
2 He was wearing a blue polo shirt with black pants.
6 The year ahead will test our political establishment to the limit. 7 PI=3.141592653589793238462643383249901429
: , , “ sed –e ‘/^$/{n;/^$/d}’test.txt” 。 “cat -s test.txt” ,n 。
3. 조건 에 맞 는 텍스트 를 sed 명령 으로 교체 할 때 s (문자열 교체), c (줄 / 블록 교체), y (문자 변환) 명령 옵션 을 사용 해 야 합 니 다.
sed 's/the/THE/' test.txt // the THE
sed 's/l/L/3' test.txt // 3 l L
sed 's/the/THE/g' test.txt // the THE
sed 's/o//g' test.txt // o ( )
sed 's/^/#/' test.txt // #
sed '/the/s/^/#/' test.txt // the #
sed 's/$/EOF/' test.txt // EOF
sed '3,5s/the/THE/g' test.txt // 3~5 the THE
sed '/the/s/o/O/g' test.txt // the o O
4. 조건 에 맞 는 텍스트 옮 기기
H ;
g G / ;
w ;
r ;
a, 。
sed '/the/{H;d};$G' test.txt // the ,{;} sed '1,5{H;d};17G' test.txt // 1~5 17
sed '/the/w out.file' test.txt // the out.file
sed '/the/r /etc/hostname' test.txt // /etc/hostname the
sed '3aNew' test.txt // 3 , New
sed '/the/aNew' test.txt // the , New sed '3aNew1
New2' test.txt // 3 ,
5. 스 크 립 트 로 파일 을 편집 하고 sed 스 크 립 트 를 사용 하면 여러 개의 편집 명령 을 파일 에 저장 할 수 있 습 니 다 (줄 마다 편집 명령). "- f" 옵션 을 통 해 호출 할 수 있 습 니 다.
sed '1,6{H;d};18G' test.txt // 1~6 18
[root@localhost opt]# vim try.list
1,6H
1,6d
18G
[root@localhost opt]# sed -f try.list test.txt
6. sed 는 파일 을 직접 조작 하여 vsftpd 서비스 설정 을 조정 하 는 스 크 립 트 를 만 듭 니 다. 익명 사용 자 는 금지 되 지만 로 컬 사용 자 는 기록 할 수 있 습 니 다.
[root@localhost opt]# vim aaa.sh
#!/bin/bash
# 、
SAMPLE="/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf " CONFIG="/etc/vsftpd/vsftpd.conf"
# , /etc/vsftpd/vsftpd.conf.bak , cp
[ ! -e "$CONFIG.bak" ] && cp $CONFIG $CONFIG.bak # ,
sed -e '/^anonymous_enable/s/YES/NO/g' $SAMPLE > $CONFIG
sed -i -e '/^local_enable/s/NO/YES/g' -e'/^write_enable/s/NO/YES/g' $CONFIG
grep "listen" $CONFIG || sed -i '$alisten=YES' $CONFIG
# vsftpd ,
systemctl restart vsftpd
systemctl enable vsftpd
[root@localhost opt]# chmod +x aaa.sh
[root@localhost opt]# ./aaa.sh
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
셸 스 크 립 트 (변수)변수: 특정한 문자열 로 고정 되 지 않 은 내용 을 표시 합 니 다. 1. 사용자 정의 변수 사용자 정의 변수: 변수 이름 = 변수 값 변수 이름 은 알파벳 이나 밑줄 로 시작 해 야 합 니 다. 대소 문자 ip ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.