기사 디렉토리
1. sed 소개
Sed는 일종의 스트림 편집기이며, 텍스트 처리에서 매우 중간 정도의 도구이며 정규 표현식과 완벽하게 사용할 수 있으며 그 기능은 특별합니다. 처리 중에는 현재 처리중인 라인을 "패턴 스페이스"라는 임시 버퍼에 저장 한 다음 버퍼의 내용을 sed 명령으로 처리하고 처리가 완료된 후 버퍼의 내용을 화면으로 보냅니다. 그런 다음 다음 줄을 처리하고 파일이 끝날 때까지이 방법을 반복합니다. 리디렉션을 사용하여 출력을 저장하지 않는 한 파일의 내용은 변경되지 않습니다. Sed는 주로 하나 이상의 파일을 자동으로 편집하고, 파일에 대한 반복 작업을 단순화하고, 변환 프로그램을 작성하는 데 사용됩니다.
2. sed 명령 소개
格式:
sed [选项] 命令 处理对象
sed [选项] '表达式1; 表达式2' 处理对象
|
|
---|---|
|
처리 결과 만 표시 |
|
수정 된 내용을 파일에 저장 |
|
같은 줄에서 여러 명령을 실행할 수 있습니다. |
|
스크립트 파일을 사용하여 파일 처리 |
|
|
---|---|
|
표시 줄 (인쇄 템플릿 블록의 줄) |
|
행 삭제 |
|
줄 삽입 (현재 줄 아래에 텍스트 삽입) |
|
줄 삽입 (현재 줄 위에 텍스트 삽입) |
|
줄 바꾸기 |
|
대체 문자 |
|
템플릿 블록을 작성하고 파일 끝에 추가합니다. |
|
파일 통합 (파일에서 행 읽기) |
|
그만두 다 |
|
다음 명령이 선택되지 않은 행에서 작동 함을 나타냅니다. |
|
현재 줄 번호 인쇄 |
|
|
---|---|
|
매치 라인 시작 |
|
일치하는 줄의 끝 |
|
개행 문자 이외의 모든 문자와 일치 |
|
0 개 이상의 문자 일치 |
|
다른 문자를 대체하기 위해 검색 문자 저장 |
|
단어의 시작과 일치 |
|
단어의 끝과 일치 |
|
m 배 |
|
m 회 이상 |
|
백만 번 |
|
0-n 배 |
|
텍스트가 나타나는 횟수 |
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 스크립트를 편집하십시오.
- http 포트 번호를 스크립트 다음에 오는 번호로 수정합니다.
- 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 #退出