記事ディレクトリ
1.sedの紹介
Sedは一種のストリームエディタであり、テキスト処理の非常に中程度のツールであり、通常の式で完全に使用でき、その機能は並外れています。処理中、現在処理されている行は「パターンスペース」と呼ばれる一時バッファに格納され、バッファ内のコンテンツがsedコマンドで処理されます。処理が完了すると、バッファのコンテンツが画面に送信されます。次に、次の行を処理し、ファイルの終わりまでこの方法を繰り返します。リダイレクトを使用して出力を保存しない限り、ファイルの内容は変更されません。Sedは主に、1つ以上のファイルを自動的に編集するため、ファイルに対する繰り返し操作を簡素化するため、変換プログラムを作成するためなどに使用されます。
2.sedコマンドの概要
格式:
sed [选项] 命令 处理对象
sed [选项] '表达式1; 表达式2' 处理对象
|
|
---|---|
|
処理結果のみを表示 |
|
変更したコンテンツをファイルに保存します |
|
同じ行で複数のコマンドを実行できるようにする |
|
スクリプトファイルを使用してファイルを処理する |
|
|
---|---|
|
表示行(印刷テンプレートブロックの行) |
|
行を削除する |
|
行を挿入(現在の行の下にテキストを挿入) |
|
行を挿入(現在の行の上にテキストを挿入) |
|
行を置き換える |
|
置換キャラクター |
|
テンプレートブロックを書き込んで、ファイルの最後に追加します |
|
ファイルを統合する(ファイルから行を読み取る) |
|
脱落 |
|
次のコマンドが選択されていない行に作用することを示します |
|
現在の行番号を印刷する |
|
|
---|---|
|
マッチングラインの開始 |
|
マッチングラインの終わり |
|
ニューライン以外の文字に一致します |
|
0文字以上一致 |
|
検索文字を保存して他の文字を置き換えます |
|
単語の先頭に一致する |
|
単語の終わりに一致する |
|
m回 |
|
少なくともm回 |
|
mn回 |
|
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 #删除空白行
挿入(現在の行の下にテキストを挿入)
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 #退出