[Linux研究ノート28-2] sedシェルテキスト処理ツール

1.sedの紹介


Sedは一種のストリームエディタであり、テキスト処理の非常に中程度のツールであり、通常の式で完全に使用でき、その機能は並外れています。処理中、現在処理されている行は「パターンスペース」と呼ばれる一時バッファに格納され、バッファ内のコンテンツがsedコマンドで処理されます。処理が完了すると、バッファのコンテンツが画面に送信されます。次に、次の行を処理し、ファイルの終わりまでこの方法を繰り返します。リダイレクトを使用して出力を保存しない限り、ファイルの内容は変更されません。Sedは主に、1つ以上のファイルを自動的に編集するため、ファイルに対する繰り返し操作を簡素化するため、変換プログラムを作成するためなどに使用されます。


2.sedコマンドの概要


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

sedオプション
-n
処理結果のみを表示
-私
変更したコンテンツをファイルに保存します
-e
同じ行で複数のコマンドを実行できるようにする
-fスクリプトファイルファイル
スクリプトファイルを使用してファイルを処理する

sedコマンド
p
表示行(印刷テンプレートブロックの行)
d
行を削除する
A
行を挿入(現在の行の下にテキストを挿入)
行を挿入(現在の行の上にテキストを挿入)
c
行を置き換える
s
置換キャラクター
wファイル
テンプレートブロックを書き込んで、ファイルの最後に追加します
rファイル
ファイルを統合する(ファイルから行を読み取る)
q
脱落
次のコマンドが選択されていない行に作用することを示します
=
現在の行番号を印刷する

sedメタキャラクターセット/キャラクター/
^
マッチングラインの開始
$
マッチングラインの終わり
ニューライン以外の文字に一致します
*
0文字以上一致
検索文字を保存して他の文字を置き換えます
\ <
単語の先頭に一致する
\>
単語の終わりに一致する
{m}
m回
{m、}
少なくともm回
{m、n}
mn回
{、n}
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を編集します

  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