セド
vimと同様にテキストエディタですが、sedは行単位で編集・処理します。
主な機能: テキスト内容の追加、削除、変更、確認。より強力なのは変更操作です。
注: 正規表現はサポートでき、拡張正規表現もサポートできますが、正規表現に完全に依存しているわけではありません。
SEDの仕組み
読み取り、実行、表示の 3 つのプロセスが含まれます。
Read: テキストコンテンツを読み取った後、読み取ったコンテンツは一時バッファ(パターンスペース)に保存されます。
実行: パターン空間では、読み取ったテキストの内容に従って 1 行ずつ実行し、行番号が指定されていない限りすべての行を走査します。上から下へ順番に実行します。
表示:実行完了後、実行結果を表示し、変更が有効になると、パターンスペースの変更内容が指定したファイルに書き込まれます。操作だけならですが、
最終的にはファイルへの書き込みは行われず、結果のみが表示され、表示終了後はパターンスペース内のデータは即座に削除されます。
sed 形式と共通オプション
sed -e 'オペレーター' ファイル 1 -e 'オペレーター' ファイル 2
1 つのファイルのみを操作する場合は -e を追加しないでください
一般的なオプション:
-e: 条件付きアクションのオプション
-f: 入力ファイルの内容を処理するスクリプト ファイルを指定します。スクリプトにコマンドを記述し、スクリプト内のコマンドを使用して 2 番目のファイルの内容を処理します。
-i: すぐに注意して使用してください。!
-n: スクリプト処理後の結果を表示(sedのデフォルト出力は禁止)
演算子: 一重引用符を使用する必要があります ''
s: 指定された文字を置き換えます
d: 削除、指定した行を削除します
a: 増加、指定された内容を現在の行の下に挿入します
i: 増加、指定した内容を指定した行の上に挿入します
c: 置換、行全体を置換
y: 置換、文字を置換しますが、置換前後の文字の長さは同じでなければなりません。
p: print (sed はデフォルトで出力を持っています)
r: 拡張正則化を使用する
sedの操作
SEDチェック機能
sed は指定された行を出力し、アドレス指定を出力します。
sed -n '4p' ファイル名 # 4行目を出力
sed -n '$p' ファイル名 #最後の行を直接出力
方法 2: 行番号の範囲間隔を出力する
sed -n '1,3p' ファイル名 #1行目から3行目までを出力
sed -n '2,$p' ファイル名 # 2行目から最終行までを出力
sed -n '2p;$p' ファイル名: 2 行目から最終行までを出力します。
行番号の範囲は次のように出力されます: 、 to ; および
奇数行と偶数行を印刷します。
sed -n 'n;p' ファイル名 (n は最初の行をスキップし、n は 2 行目をスキップします)
テキストフィルターモード:
最初に: 指定された文字列を含むコンテンツを出力します。
sed -n '/o/p' ファイル名
sed -n '/big/p' ファイル名 #big を含むすべての行が出力されます
基本的な正規表現を適用して印刷します。
sed -n '/^root/p' /etc/passwd #root で始まる行を出力します
sed -n '/bash$/p' /etc/passwd #bashで終わる行を出力します
sed削除
削除する行番号を指定します。
sed -n '3d;p'filename#3 行目の内容を削除し、残りの内容を出力します。
sed -n '1d;3d;p' ファイル名 #1 行目と 3 行目の内容を削除し、残りの内容を出力します。
sed -n '1d, 3d;p' ファイル名 # 1 行目から 3 行目までの内容を削除し、残りの内容を出力します。
(、は~を意味します; を意味し、そして)
sed '/big/d' ファイル名 # 削除する文字列の内容 (big) に一致
セド '/o/! d' ファイル名 # 文字列の内容 (o) と一致し、o を除くすべてを削除します
正規表現を使用して削除します。
sed '/^$/d' ファイル名 #空白行を削除
sed の交換 (強調!!)
■ 置換文字列:
sed -n 's/root/test/p' /etc/passwd #現在の行の最初のルートを test に置き換えます
sed -n 's/root/test/gp' /etc/passwd #現在の行のすべてのルートを test に置き換えます
置換に使用するアルファベットの大文字と小文字:
l&: 特殊記号を小文字に変換し、再度使用する場合はエスケープ文字が必要です。
u&: サイズに変換される特殊記号。使用する場合はエスケープ文字が必要です
g: すべてを置換します。追加されていない場合は、最初の文字のみを置換します。
sed 's/[az]/\u&/' 123.txt
c を使用して行全体を置き換えます。
sed '/置換される行/c 置換されるコンテンツ' ファイル名
y 単一文字置換:
sed 'y/'
sedの追加
a 次の行に追加: sed '/指定された行/追加されたコンテンツ' ファイル名
i 前の行に追加: sed '/指定された行/i コンテンツを追加' ファイル名
r は、指定されたファイルの行番号の内容を読み取ります (行の後に追加します)。
sed '/元のファイルの現在行の下/r 内容を読み取るファイル' は、操作の対象となるファイルを指定します
指定した時間内のログを表示します。
sed -n '/Jul 20 18:36:12/,/Jul 20 18:50:01/p' /var/log/messages
面接の質問
1. ファイルが大きすぎる場合はどうすればよいですか?
方法 1:split -l 行ごとに切り取って処理する (大きなファイルに適しています)
方法 2: cat ファイル名 | sed 処理 (中サイズのファイルの場合)
2. ファイルを入力せずにファイルの内容を削除する方法 (つまり、対話なしで削除する)
方法 1: sed -i 'd' ファイル名
方法 2: cat /dev/null > ファイル名