使い方

参考:

sed – テキストの置換処理を得意とするスクリプト言語 | bioinformatics

sed でこういう時はどう書く? – Qiita

正規表現 & sed & awk – Qiita

sed コマンド | hydrocul のメモ

sed による文字列操作 | どこでも見れるメモ帳

あえていうほどでもない sed 入門 | TECHSCORE BLOG

sed の使い方 | hata

sed コマンド – 使い方まとめ | RAKUS Developers Blog

sed コマンド – 正規表現を使って文字を置き換える | @IT

オプション

ドキュメント:

Command-Line Options | sed

コマンド

  • d削除する
  • p出力する
  • s置換する

ドキュメント:

Commands List | sed

パターン処理

パターンに合致した行のみ表示する。

$ cat input.txt | sed -n -e '/pattern/p'

開始パターンに合致した行から終了パターンに合致した行の範囲を表示する。

$ cat input.txt | sed -n -e '/start/,/end/p'

パターンに合致した行から3行のみ表示する。

$ cat input.txt | sed -n -e '/pattern/,+2p'

パターンに合致しなかった行のみ表示する。

$ cat input.txt | sed -n -e '/pattern/!p'

ドキュメント:

Regexp Addresses | sed

参考:

Understanding how range addresses work – Unix & Linux Stack Exchange

範囲指定

ドキュメント:

Range Addresses | sed

参考:

Delete range of lines above pattern – Unix & Linux Stack Exchange

メタ文字

  • \d[0-9]
  • \w[0-9a-zA-Z_]

参考:

正規表現で \w \d \s を実現する方法 | 小粋空間

正規表現メモ | 木村浩一

文字クラス

参考:

Character Classes and Bracket Expressions | sed

POSIX

  • スペース[[:space:]]

参考:

How to match whitespace in sed? – Super User

置換

s コマンド (s/before/after/g) を用いて、文字列を置換する。

$ echo "Hello, NAME" | sed -e "s/NAME/John/g"

参考:

文字列置換 bash / sed について! | Beエンジニア

最短一致

sed コマンドには最短一致の機能は存在しない。代わりにクラスの否定を使う。

  • [^X]+1つ以上の X 以外の文字にマッチする。

参考:

最短一致をする – Qiita

置換する際に最短一致で指定をする | 俺的備忘録

最長一致、最短一致 についての考察  | ソーシャルゲーム基盤

最短一致について – teratail

後方参照

置換の際に、(.*) などの丸括弧で囲んだ部分が一致した値を \1, \2, … で利用することができる。

参考:

正規表現で一致した値を再利用して置換する | goodbyegangster のブログ

スペースを取り除く

参考:

正規表現で連続したスペースを削除する – Qiita

How to match whitespace? – Super User

空行を取り除く

$ cat file.txt | sed '/^$/d'

参考:

空行削除 | inuz の日記

パターン別ファイルの空行削除方法 | 俺的備忘録

ファイルや複数行文字列の末尾の余計な空白行や改行を消す | rcmdnk’s blog

sed でこういう時はどう書く? – Qiita

改行に置き換える

BSD sed の場合、エスケープのためのバックスラッシュ \ の後、一旦クォートを閉じて、ANSI-C クォーティングで囲った改行 $'\n' を入力し、その後にクォーテーションで囲って元の続きを書く。

$ sed -E 's/hoge/\'$'\n''/g'

GNU sed の場合、普通の \n で良い。

$ sed -E 's/hoge/\n/g'

参考:

置換で改行を出力する – Qiita

Mac の sed で改行コードを出力させる 改行コードの違い再確認 – Qiita

改行を出力する | rcmdnk’s blog

Mac の sed で改行を置換する | それマグで!

改行を置換する

参考:

改行をスペースに置換するコマンド – Qiita

改行を置換/削除する | 俺的備忘録

OS X の sed で改行を置換する | kanz メモ

ファイルや複数行文字列の末尾の余計な空白行や改行を消す | rcmdnk’s blog

ファイルの最終行が空行だった場合のみ、その行を削除する | 俺的備忘録

改行を部分的に置換したい – teratail

replace newlines within a string range – Unix & Linux Stack Exchange

キャリッジリターンを取り除く

参考:

Remove carriage return – Stack Overflow

CR を CRLF に置き換える

参考:

How to add a carriage return before every newline? – Unix & Linux Stack Exchange

行頭に文字列を追加する

参考:

行の先頭に文字列を追加する | Linux と過ごす

タブを置換する

参考:

BSD / Mac の sed でのタブ文字を変換する 3つの方法 | rcmdnk’s blog

シェル変数を展開して使う際のエスケープ

参考:

変数に代入されている & 等のメタ文字のエスケープ処理を行いたい – teratail

パターンに合致した行に追記する

参考:

指定した行に行挿入したい | Linux と過ごす

特定の範囲のみ出力する

1行目から5行目を表示する。

$ cat input.txt | sed -n -e '1,5p'

置換して合致した行のみ出力するには、-n オプションを指定して p コマンドを使う。

$ cat input.txt | sed -nE "s/^#\\s*//p"

参考:

sed で指定した範囲の行を表示する | まくまくノート

sed でマッチした行だけ標準出力する | pig’s diary

sed の結果を使ってコマンドを実行する – sed コマンド 応用編 | @IT

print only matching group – Stack Overflow

return matched string – Unix & Linux Stack Exchange

パターンに合致した行の前後を処理する

参考:

ある行の n 行前から処理対象にする | grep Tips *

How to append line after a range match – Stack Overflow

search a range and print first set – Stack Overflow

have a range finishing with the last occurrence of a pattern (greedy range) – Unix & Linux Stack Exchange

最終行のみ処理する

※ BSD sed で処理すると必ず最後に改行が入る。(仕様)

参考:

最終行に挿入 – Qiita

ファイルの最終行が空行だった場合のみ、その行を削除する | 俺的備忘録

ファイルの最初 or 最後の行に挿入/追記する | 俺的備忘録

最終行から n 行にだけ処理を行わせる | 俺的備忘録

ファイルの最後に行を挿入する方法 | ITを使っていこう

ファイルの最後の行だけを置換する | akamist blog

最終行が特定の文字列の場合のみ行削除! | mk-mode BLOG

最初と最後の行を表示する | Bye Bye Moore

改行を挿入する形で置換しようとしたとき、最後に余計な改行が入る – スタック・オーバーフロー

特定の行を削除する

  • 特定の行を削除するには、d コマンドを使用する。
使い方

1行目から5行目を削除する。

$ cat input.txt | sed -e '1,5d'

パターンに合致した行を削除する。

$ cat input.txt | sed -e '/pattern/d'

参考:

ファイルの先頭の行を削除する方法 | IT を使っていこう

sed コマンド – 基礎編その2/行番号、パターンを指定して削除する | @IT

最後の行を削除する

最終行の行番号を表す $ を用いて、d コマンドで最終行を削除する。

$ cat input.txt | sed -e '$d'

最後の数行を削除する場合、簡潔に記述できるコマンドは存在しないため、head コマンドを使う方がよい。

$ cat input.txt | head -n -3 > output.txt

参考:

ファイルの最後の行を削除する方法 | IT を使っていこう

テキストの最後の行を削除した内容がほしい | softel メモ

最後の行だけ削除する | bettamodoki のブログ

ファイルの最終4行を消す処理について | 余白の書きなぐり

パターンに合致した次の行を削除する

パターンに合致した次の行を削除するには、パターンに n コマンドと d コマンドをグループ化して適用する。

$ cat input.txt | sed -e '/pattern/{n;d;}'

参考:

sed で特定行の次の行を削除する – Qiita

パターンに合致した次の行に文字列を追加する

参考:

指定した行の次の行に任意の文字列を追加する | kakakikikeke のブログ

指定した個数飛ばしに処理する

参考:

n回目に出現する文字を置換する方法 – スタック・オーバーフロー

sed with next line (`+N` option) and frequency (`~N`) together – Unix & Linux Stack Exchange

特定の行以降を出力する

パターンに合致した行から最終行までを出力する。

$ cat input.txt | sed -n -e '/pattern/,$p'

参考:

任意の文字列以降の行をすべて出力したい – Qiita

任意の文字列以降の行をすべて出力する – Qiita

How to print a range of line to end of file – Stack Overflow

特定の範囲を結合する

参考:

joining a range of selected lines – Stack Overflow

特定の範囲を逆順に表示/処理する

参考:

line number range with an ‘inverted’ range specified – Stack Overflow

各行の先頭に行番号を挿入する

sed コマンドで行番号を付与するには、= コマンドで行番号を出力し、改行を空白に置き換える。

$ cat input.txt | sed -e '=' | sed -e 'N; s/\n/ /'

awk コマンドを使う場合は、printf で出力するだけでよい。

$ cat input.txt | awk '{ printf "%d %s\n", NR, $0 }'

参考:

sed で行番号をつける | tnomura のブログ

How can I prepend a line number and tab to each line of a text file? – Super User

Insert line numbers into file with sed – Stack Overflow

パターンスペース/ホールドスペース

参考:

パターンスペース/ホールドスペースの動作を図で学ぶ – Qiita

GNU / BSD / オプションによるメタ文字の違い (BRE / ERE)

基本正規表現 (BRE)

-E オプションなしで実行した場合の挙動

  • \(\)グルーピング (エスケープが必要)
  • \{n,m\}n 回から m 回の出現を表す (エスケープが必要)
拡張正規表現 (ERE)

-E オプションありで実行した場合の挙動

  • .任意の一文字を表す
  • ?0回もしくは1回の出現を表す
  • |任意のパターンのいずれかを表す

参考:

基本正規表現と拡張正規表現 | 気ままなブログ

正規表現 + の扱い – スタック・オーバーフロー

正規表現で + がイメージと違う動作をします – teratail

Mac / BSD 版の違い

参考:

Mac 環境で sed を使うときの注意 | tjinjin’s blog

正規表現 + の扱い – スタック・オーバーフロー

ワンライナー

参考:

ワンライナーでお手軽実行可能な sed 入門 – Qiita

ドキュメント

Man page of SED | JM Project

sed – a stream editor | GNU.org

まとめ/Tips

sed コマンドの使い方まとめ/置換/行挿入/行削除など | hara-chan.com

sed / 正規表現メモ | Tech random memoranda

sed メモ | カビパン男と私

sed メモ 第二版 |カビパン男と私

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Protected by reCAPTCHA