セド
1. コマンドの紹介
まずヘルプドキュメントにアクセスして、コマンドの説明情報を表示します。
名前
sed - テキストのフィルタリングと変換のためのストリームエディタ
sed コマンドは、テキスト コンテンツの操作、フィルタリング、および変換のための強力なツールです。一般的な機能には、正規表現を組み合わせて、ファイルの追加、削除、変更、およびクエリをすばやく実行することが含まれます。クエリ関数の中で最もよく使用される 2 つの関数は、フィルタリング (抽出) です。文字列)と行のフェッチ(指定された行を取得)。
ヒント: sed と awk は両方とも一重引用符を使用し、二重引用符には特別な解釈があることに注意してください。
2. 文法形式
構文形式は次のとおりです。 sed [パラメータ] [sed 組み込みコマンド文字] [ファイル]
概要
sed [オプション]… {他のスクリプトがない場合のスクリプトのみ} [入力ファイル]…
3. 基本パラメータ
-n, --quiet, --silent
suppress automatic printing of pattern space
-e script, --expression=script
add the script to the commands to be executed
-f script-file, --file=script-file
add the contents of script-file to the commands to be executed
--follow-symlinks
follow symlinks when processing in place
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
-c, --copy
use copy instead of rename when shuffling files in -i mode
-b, --binary
does nothing; for compatibility with WIN32/CYGWIN/MSDOS/EMX ( open files in
binary mode (CR+LFs are not treated specially))
-l N, --line-length=N
--posix
disable all GNU extensions.
-r, --regexp-extended
use extended regular expressions in the script.
-s, --separate
consider files as separate rather than as a single continuous long stream.
-u, --unbuffered
load minimal amounts of data from the input files and flush the output buffers
more often
-z, --null-data
separate lines by NUL characters
--help
display this help and exit
--version
output version information and exit
一般的に使用されるコマンド パラメータは次のとおりです。
-n | 一致したコンテンツのみを出力します。多くの場合、sed 組み込みコマンド p と一緒に使用されます。 |
-私 | 変更した結果の内容をファイルに直接書き込みます |
-e | 複数回編集された |
-r | 正規表現拡張のサポート |
-i パラメータが追加されていない場合、sed コマンドはこのコマンドをメモリ内でのみ実行し、ファイル内の情報は変更されません。-i パラメータを追加すると、結果はファイルに書き込まれ、出力されません。画面に表示されます。
sed 組み込みコマンドパラメータ:
ある | コンテンツを追加し、指定した行の後に 1 行以上のテキストを追加します。 |
d | 一致する行を削除する |
私 | テキストを挿入し、指定された行の前に 1 行以上の行を追加することを示します。 |
p | 一致した行の内容を出力します。通常は -n とともに使用されます。 |
s/レギュラー/差し替えコンテンツ/g | 通常のコンテンツと一致してからコンテンツを置き換えます。末尾の g はグローバル一致を意味します |
s/regulatory/replacement content/g の中央の / は、#、@、+ などの他の文字に置き換えることができます。
sed は次の範囲に一致します。
空アドレス:全文処理を示す
単一アドレス:ファイルの特定の行を指定/pattern/:
パターンと一致する各行
の範囲:10,20は10~20行、10,+5は5行の内容を意味する10 行目から下、 /pattern1/、/pattern2/
ステップ サイズ: 1-2、1、3、5、7、9 ベース ラインを意味します。2-2 2 ステップ、2、4、6、8、10 を意味します。偶数線
4. 参考事例
4.1 ファイルの内容を検索する
/etc/passwd
2行目から5行目の内容を検索し、-n p
一致した結果が画面に出力されることを示します
[root@localhost ~]# sed -n "2,5p" /etc/passwd
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
/etc/passwd
5 行目と次の 3 行の内容を検索します。
[root@localhost ~]# sed -n "5,+3p" /etc/passwd
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
4.2 キーワードの内容を調べる
ルート文字を含むコンテンツを検索してフィルタリングし/etc/passwd
、画面に出力します
[root@localhost ~]# sed "/root/p" /etc/passwd -n
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
4.3 ファイルから行を削除する
Good の行を削除すると、-i
ここで必要なパラメータが使用され、結果は画面に出力されず、実行される結果が直接ファイルに書き込まれることがわかります。
[root@localhost ~]# sed "/good/d" test.txt -i
[root@localhost ~]# cat test.txt
appleeeeeee
bear
appdieee
dadaaaaaa
pperd
行末までの内容を削除することもできます
[root@localhost ~]# sed '3,$d' test.txt -i
[root@localhost ~]# cat test.txt
appleeeeeee
bear
ルートから FTP へのテキストを削除したいが、ファイル内のテキストの行数がわからない場合は、正規化を使用してこのタスクを実行できます。
[root@localhost ~]# sed '/^root/,/^ftp/d' passwd | head -10
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
host:x:1000:1000:host:/home/host:/bin/bash
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
libstoragemgmt:x:998:994:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
#执行的结果到文件中
[root@localhost ~]# sed '/^root/,/^ftp/d' passwd -i
4.4 テキストコンテンツを置換する
テキストの内容を置き換えるのに必要なパラメータはs///g
、もちろん、このメソッドを使用して結果をファイルに書き込むことができます。
[root@localhost ~]# sed 's/bear/pear/g' test.txt -i
[root@localhost ~]# cat test.txt
appleeeeeee
pear
appleeeeeee
appleeeeeee
pear
pear
appleeeeeee
pear
[root@localhost ~]# sed 's#apple#door#g' test.txt
dooreeeeee
pear
dooreeeeee
dooreeeeee
pear
pear
dooreeeeee
pear
テキストの内容を複数回置き換えることもできます
[root@localhost ~]# sed -e 's/do/done/g' -e 's/pear/cat/g' test.txt -i
[root@localhost ~]# cat test.txt
appleeeeeee
cat
appleeeeeee
appleeeeeee
cat
cat
appleeeeeee
cat
4.5 コンテンツの書き込み
内容を次の行に追加してファイルに書き込みます
[root@localhost ~]# sed '3a hello world!' passwd -i
[root@localhost ~]# head -n 5 passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
hello world!
adm:x:3:4:adm:/var/adm:/sbin/nologin
各行の後にコンテンツを追加する場合は、先頭に数字を追加する必要はありません。
[root@localhost ~]# sed 'a hello world' passwd -i
[root@localhost ~]# head -5 passwd
root:x:0:0:root:/root:/bin/bash
hello world
bin:x:1:1:bin:/bin:/sbin/nologin
hello world
コンテンツを 2 行同時に書くこともできます。\n
折り返しに使用します。
[root@localhost ~]# sed '5a this is passwd\nthis is test' passwd -i
[root@localhost ~]# sed '1a this is passwd\nthis is test' passwd -i
[root@localhost ~]# head -5 passwd
root:x:0:0:root:/root:/bin/bash
this is passwd
this is test
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
4.6 ネットワークカードのIPアドレスの表示
ここでの -e の使用は、3 種類の sed インターセプトを使用して、頭をつまんでしっぽを取り除く方法を使用しているとも言えます。
[root@localhost ~]# ifconfig ens32 | sed '2p' -n | sed 's/^.*inet//' | sed 's/net.*$//'
192.168.10.24
[root@localhost ~]# ifconfig ens32 | sed -e '2s/^.*inet//' -e '2s/net.*$//p' -n
192.168.10.24
[root@localhost ~]# ifconfig ens32 |sed '2s/^.*inet//;s/netmask.*//p' -n
4.7 設定ファイルの表示
設定ファイルの # 記号が含まれていないファイルの内容を確認したいのですが、このコマンドでも使えますか? # 記号とスペースを含む行を削除すると、見たい設定ファイルが表示されます。情報が表示されます。
[root@localhost ~]# sed -e '/#/d' -e '/^$/d' /etc/httpd/conf/httpd.conf
パラメーターを使用しなくて-e
も大丈夫です。セミコロンを使用して、2 つの一致する情報を一緒に記述することができます。
[root@localhost ~]# sed -e '/#/d;/^$/d' /etc/httpd/conf/httpd.conf
4.8 1 ~ 3 行目の内容の前に # を追加します
通常の状況では、コンテンツの前にスペースはありませんが、この効果を実現するにはどうすればよいでしょうか? 実際、これを実現するには置換メソッドを使用する必要もあります。
パラメータ拡張は、最初の文字情報を最初のグループに照合するために使用され-r
、2 番目のグループは # で記述され、\1
前のグループの結果が照合に使用されます。
[root@localhost ~]# sed -r -n '1,3s/(^.)/#\1/gp' passwd
#root:x:0:0:root:/root:/bin/bash
#bin:x:1:1:bin:/bin:/sbin/nologin
#daemon:x:2:2:daemon:/sbin:/sbin/nologin
4.9 システムのバージョンを確認する
最初にこのファイルの情報を表示できます
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
7.9.2009 など、特定のバージョン情報だけを確認したい場合は、awk を使用する方が簡単です。
[root@localhost ~]# awk '{print $4}' /etc/redhat-release
7.9.2009
sedコマンドを使いたい場合、どのように使うのか、まずは考えてみましょう。先ほどのIP傍受のように頭と尻尾を切る方法を使えばよいのでしょうか?
[root@localhost ~]# sed -r -n 's/^.*ase[[:space:]]//p' /etc/redhat-release
7.9.2009 (Core)
要約する
sed の機能は本当に強力です。フィルタリングしたり、テキストを変換したり、情報を書き込んだりすることができます。このパラメータ コマンドを使用するかどうかを選択できます。良かったら、いいねしてサポートしてください。