[Linux 연구 노트 28-2] sed 쉘 텍스트 처리 도구

1. sed 소개


Sed는 일종의 스트림 편집기이며, 텍스트 처리에서 매우 중간 정도의 도구이며 정규 표현식과 완벽하게 사용할 수 있으며 그 기능은 특별합니다. 처리 중에는 현재 처리중인 라인을 "패턴 스페이스"라는 임시 버퍼에 저장 한 다음 버퍼의 내용을 sed 명령으로 처리하고 처리가 완료된 후 버퍼의 내용을 화면으로 보냅니다. 그런 다음 다음 줄을 처리하고 파일이 끝날 때까지이 방법을 반복합니다. 리디렉션을 사용하여 출력을 저장하지 않는 한 파일의 내용은 변경되지 않습니다. Sed는 주로 하나 이상의 파일을 자동으로 편집하고, 파일에 대한 반복 작업을 단순화하고, 변환 프로그램을 작성하는 데 사용됩니다.


2. sed 명령 소개


格式:
sed [选项] 命令 处理对象
sed [选项] '表达式1; 表达式2' 处理对象

sed 옵션
-엔
처리 결과 만 표시
-나는
수정 된 내용을 파일에 저장
-이자형
같은 줄에서 여러 명령을 실행할 수 있습니다.
-f 스크립트 파일 파일
스크립트 파일을 사용하여 파일 처리

sed 명령
표시 줄 (인쇄 템플릿 블록의 줄)
행 삭제
줄 삽입 (현재 줄 아래에 텍스트 삽입)
나는
줄 삽입 (현재 줄 위에 텍스트 삽입)
줄 바꾸기
에스
대체 문자
w 파일
템플릿 블록을 작성하고 파일 끝에 추가합니다.
r 파일
파일 통합 (파일에서 행 읽기)
그만두 다
!
다음 명령이 선택되지 않은 행에서 작동 함을 나타냅니다.
=
현재 줄 번호 인쇄

sed 메타 문자 세트 / 문자 /
^
매치 라인 시작
$
일치하는 줄의 끝
.
개행 문자 이외의 모든 문자와 일치
*
0 개 이상의 문자 일치
&
다른 문자를 대체하기 위해 검색 문자 저장
\ <
단어의 시작과 일치
\>
단어의 끝과 일치
{미디엄}
m 배
{미디엄,}
m 회 이상
{m, n}
백만 번
{,엔}
0-n 배
(텍스트) {times}
텍스트가 나타나는 횟수


3. sed 사용법의 예


p 디스플레이 라인

-n 5p	#显示第五行
-n 3,5p	#显示3-5行
-ne '3p;5p'	#显示3和5行
-ne '5,$p'	#5-最后一行
-n '/^ro/p'	#显示以ro开头的行

여기에 사진 설명 삽입

d 삭제

sed 5d passwd	#删除第5行
sed '/^ro/d' passwd	#把ro开头的行删除
sed '/^ro/!d' passwd	#除了ro开头的行都删除
sed '3,$d' passwd	#删除第3行之后
sed '/^$/d' passwd	#删除空白行

여기에 사진 설명 삽입

a 삽입 (현재 줄 아래에 텍스트 삽입)

sed "5a hello westos" passwd	#第5行后添加行
sed "/root/a hello westos" passwd	#有root的行后添加行
sed '$a hello westos' passwd	#最后一行后添加行
sed '1,5a hello westos' passwd	#1-5行,每行后添加行
sed -e '1a hello westos' -e '5a hello' passwd	#第一行和第5行后添加行

여기에 사진 설명 삽입
여기에 사진 설명 삽입

i 삽입 (현재 줄 위에 텍스트 삽입)

sed '3i zy' passwd	#在第3行前插入行
sed '1,3i zy' passwd	#在1-3行,每行前插入行
sed '/lp/i zy' passwd	#在有lp这一行前插入行

여기에 사진 설명 삽입

c 교체

sed '3c hello zy' passwd	#第3行替换
sed '/^root/c hello zy' passwd	#root开头的行替换
sed '/sbin/c hello zy' passwd	#有sbin的行替换

여기에 사진 설명 삽입

w 쓰기 파일

sed '3w w_file' passwd	#把文件passwd的第三行写入到w_file中
sed '3,5w w_file' passwd	#把文件passwd的3-5行写入到w_file中
sed '/var/w w_file' passwd	#把文件passwd有var的行写入到w_file中

여기에 사진 설명 삽입

r 통합 파일


(줄 번호 뒤)

sed '3r r_file' passwd	#把文件r_file整合在passwd第3行之后
sed '$r r_file' passwd	#把文件r_file整合在passwd最后

여기에 사진 설명 삽입

s 대체 문자

sed 's/sbin/---/g' passwd	#把全文的sbin替换为---
sed '3s/sbin/---/g' passwd	#把第3行的sbin替换为---
sed '2,4s/sbin/---/g' passwd	#把第2-4行的sbin替换为---
sed '2,4s/sbin/---/g;6s/sbin/+++/g' passwd	#把第2-4行的sbin替换为---,第6行的sbin替换为+++
sed -e '/bin/,/adm/s/sbin/---/g' passwd	#bin到adm之间的行的sbin替换为---
sed -e 's/\//--/g' passwd	#把/替换为-(需要转义符号)
sed -e 's@/@777@g' passwd	#把/替换为-(用@无需转义)

여기에 사진 설명 삽입
여기에 사진 설명 삽입

= 줄 번호 표시

sed '=' passwd	#显示行号(行号和内容不在同一列)
sed '$=' passwd	#只显示最后一行的行号
sed '=' passwd | sed -e 'N;s/\n/ /g'	#将行号和内容显示在同一列
sed -n '$=' passwd	#统计行号
wc -l passwd	#统计行号

여기에 사진 설명 삽입
여기에 사진 설명 삽입



4. 테스트


apache_port.sh 스크립트를 편집하십시오.

  1. http 포트 번호를 스크립트 다음에 오는 번호로 수정합니다.
  2. selinux가 꺼져 있습니다

#!/bin/bash
#检测脚本后的端口号是否为空
[ -z $1 ] && {
    
    
	echo "ERROR: Please input port following script !"
	exit
	}
#找到http主配置文件中的端口号那一行 并修改
sed "/^Listen/c Listen $1" -i /etc/httpd/conf/httpd.conf
#重启httpd服务
systemctl restart httpd
exit	#退出

여기에 사진 설명 삽입

추천

출처blog.csdn.net/weixin_46069582/article/details/111407822