シェルテキスト処理三銃士におけるsedの使用について
2022-02-08 11:47:57
sedはstream editorの略で、主に標準出力やファイルの処理に使用されます。
シンタックス
stdout | sed [option] "pattern command"
sed [option] "pattern command" file1
共通オプション(option)
# -n prints only the silent mode match line, not the original line
# p is the print command
➜ sed '/hello/p' helloWorld.sh
#! /bin/bash
HELLO bash
echo "hello world"
echo "hello world"
➜ sed -n '/hello/p' helloWorld.sh
echo "hello world"
# -e append a set of edit commands
➜ sed -n -e '/hello/p' -e '/HELLO/p' helloWorld.sh
HELLO bash
echo "hello world"
# -f Saves all editing commands in a file, for complex editing operations
➜ cat edit.sed
/hello/p
➜ sed -n -f edit.sed hello.md
# -E (or -r) supports extended regular expressions
➜ sed -n -E '/hello|HELLO/p' helloWorld.sh
HELLO bash
echo "hello world"
# -i modifies the source file directly
# s is the replace command
# here is to change all the hello in helloWorld.sh file to hello123
sed -n -i 's/hello/hello123/g' helloWorld.sh
マッチングパターン(パターン)
<テーブル マッチングパターン 説明 10コマンド 10行目 10,20コマンド 10行目から20行目 10,+5コマンド 10行目から16行目 /パターン1/コマンド pattern1 に対応する行にマッチする /pattern1/,/pattern2/コマンド パターン1に対応する行から始まり、パターン2に対応する行に進む 10,/pattern1/コマンド 10行目からpattern1の行に移動する /pattern1/,10コマンド pattern1に対応する行から開始し、10行目まで進む
共通編集コマンド(コマンド)
クエリ
- p マッチを表示する
追加
- a string 行の後に追加する
- i string 行の前に追加
- r file 外部ファイルから読み込み、一致する行の後に追加する。
- w newfile 一致した行を外部ファイルに書き出す
削除
- d 削除
変更
- s/old/new 行の最初のoldをnewに置き換える。
- s/old/new/g 行中のすべてのoldをnewに置き換える。
- s/old/new/2g 2行目からファイル末尾までの古いファイルをすべて新しいものに置き換えます。
- s/old/new/ig 大文字小文字を区別せず、古いものを新しいものに置き換える。
例
# Delete lines that start with sys and end with /sbin/nologin
➜ sed -i '/^sys.*\/sbin\/nologin$/d' passwd_bak
# Delete comment lines, empty lines
sed -i '/[:blank:]*#/d;/^$/d' passwd_bak
# Find the line starting with vagrant, append the next line
➜ sed -i '/^vagrant/a This is the appended line' passwd_bak
# Replace all roots with root123
➜ sed -i 's/root/root123/ig' passwd_bak
# Append _666 to the end of all lines that start with sys and end with nologin
# where & indicates the previous regular match
➜ sed -i 's/^sys.*nologin$/&_666/g' passwd_bak
# Change all lines starting with sys and ending with nologin_666 to
# Start with SYS_ and end with _777, where \1 is the middle part of the match in the preceding parentheses
➜ sed -i 's/^sys\(. *\)nologin_666$/SYS_\1_777/g' passwd_bak
# Change all sys in lines 1 to 10 to SYS
➜ sed -i '1,10s/sys/SYS/ig' passwd_bak
# Count the number of mysqld subconfiguration items in my.cnf file
# sed finds the line from [mysqld] to the next [. *]
# grep -v filters comments, empty lines, and [. *] lines
# wc -l counts the last lines
sed -n "/^\[mysqld\]$/,/^\[. *\]$/p" /etc/my.cnf | grep -Ev '^$|[#;]|^\[. *' | wc -l
注意:マッチパターンに変数がある場合、二重引用符を使うことを推奨します。例えば、sed -i "s/$OLD_STR/$NEW_STR/g" passwd_bak
今回は、シェルテキスト処理の三剣士であるsedの使い方について紹介しましたが、シェルテキスト処理sedについては、スクリプトの館の過去記事を検索するか、引き続き以下の関連記事を閲覧してください。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
rm -rf / vs rm -rf /* rmの代わりにmvを使用することを推奨
-
シェルスクリプトにおける$シンボルのいくつかの使用法のまとめ
-
シェルスクリプト暗号化ツールshcの詳細説明
-
Rsyncはすべてのバックアップツールを殺す、あなたは手動で特定のディレクトリをブロックすることができますか?
-
Linux端末でコマンド出力をファイルに保存する方法
-
Linuxでシェルスクリプトの先頭に固定書式を設定する方法
-
Linux bashのバウンスシェルの原理を簡単に解析してみた
-
ディスク監視システム導入のためのシェルスクリプト
-
cdコマンドの使用を減らすためのautojumpコマンドのLinux実装
-
シェルのダブルクォートとシングルクォートの違いは何ですか?