目次
- 1 使い方
- 2 オプション
- 3 メタ文字
- 4 文字クラス
- 5 POSIX
- 6 最短一致
- 7 後方参照
- 8 スペースを取り除く
- 9 空行を取り除く
- 10 改行に置き換える
- 11 改行を置換する
- 12 キャリッジリターンを取り除く
- 13 CR を CRLF に置き換える
- 14 行頭に文字列を追加する
- 15 タブを置換する
- 16 シェル変数を展開して使う際のエスケープ
- 17 -n オプション / p コマンド
- 18 最終行のみ処理する
- 19 パターンスペース/ホールドスペース
- 20 GNU / BSD / オプションによるメタ文字の違い (BRE / ERE)
- 21 Mac / BSD 版の違い
- 22 ワンライナー
- 23 ドキュメント
- 24 Tips
使い方
参考:
sed – テキストの置換処理を得意とするスクリプト言語 | bioinformatics
あえていうほどでもない sed 入門 | TECHSCORE BLOG
sed コマンド – 正規表現を使って文字を置き換える | @IT
オプション
参考:
メタ文字
\d
:[0-9]
\w
:[0-9a-zA-Z_]
参考:
sed の正規表現で \w \d \s を実現する方法 | 小粋空間
文字クラス
参考:
Character Classes and Bracket Expressions | sed
POSIX
- スペース:
[[:space:]]
参考:
How to match whitespace in sed? – Super User
最短一致
sed には最短一致の機能は存在しない。代わりに、クラスの否定を使う。
[^X]+
:1つ以上の X
以外の文字にマッチする。
参考:
最長一致、最短一致 についての考察 | ソーシャルゲーム基盤
後方参照
置換の際に、(.*)
などの丸括弧で囲んだ部分が一致した値を \1
, \2
, … で利用することができる。
参考:
sed コマンドで、正規表現で一致した値を再利用して置換する | goodbyegangster のブログ
スペースを取り除く
参考:
How to match whitespace in sed? – Super User
空行を取り除く
$ cat file.txt | sed '/^$/d'
参考:
sed を使ってファイルや複数行文字列の末尾の余計な空白行や改行を消す | rcmdnk’s blog
改行に置き換える
BSD sed の場合、エスケープのためのバックスラッシュ \
の後、一旦クォートを閉じて、ANSI-C クォーティングで囲った改行 $'\n'
を入力し、その後にクォーテーションで囲って元の続きを書く。
$ sed -E 's/hoge/\'$'\n''/g'
GNU sed の場合、普通の \n
で良い。
$ sed -E 's/hoge/\n/g'
参考:
Mac の sed で改行コードを出力させる 改行コードの違い再確認 – Qiita
改行を置換する
参考:
sed を使ってファイルや複数行文字列の末尾の余計な空白行や改行を消す | rcmdnk’s blog
sed でファイルの最終行が空行だった場合のみ、その行を削除する | 俺的備忘録
sed コマンドで改行を部分的に置換したい – teratail
キャリッジリターンを取り除く
参考:
Remove carriage return in Unix – Stack Overflow
CR を CRLF に置き換える
参考:
How to add a carriage return before every newline? – Unix & Linux Stack Exchange
行頭に文字列を追加する
参考:
sed を使って行の先頭に文字列を追加する | Linux と過ごす
タブを置換する
参考:
BSD / Mac の sed でのタブ文字を変換する 3つの方法 | rcmdnk’s blog
シェル変数を展開して使う際のエスケープ
参考:
sed で変数に代入されている & 等のメタ文字のエスケープ処理を行いたい – teratail
-n オプション / p コマンド
参考:
print only matching group – Stack Overflow
Only return the matched string in sed – Unix & Linux Stack Exchange
最終行のみ処理する
※ BSD sed で処理すると必ず最後に改行が入る。(仕様)
参考:
sed でファイルの最終行が空行だった場合のみ、その行を削除する | 俺的備忘録
sed でファイルの最初 or 最後の行に挿入 (追記) する | 俺的備忘録
sed/awk で最終行から n 行にだけ処理を行わせる | 俺的備忘録
sed でファイルの最後に行を挿入する方法 | ITを使っていこう
sed でファイルの最後の行だけを置換する | akamist blog
sed で最終行が特定の文字列の場合のみ行削除! | mk-mode BLOG
sed で最初と最後の行を表示する | Bye Bye Moore
改行を挿入する形で置換しようとしたとき、最後に余計な改行が入る – スタック・オーバーフロー
パターンスペース/ホールドスペース
参考:
sed のパターンスペース/ホールドスペースの動作を図で学ぶ – Qiita
GNU / BSD / オプションによるメタ文字の違い (BRE / ERE)
基本正規表現 (BRE)
-E
オプションなしで実行した場合の挙動
\(\)
:グルーピング (エスケープが必要)\{n,m\}
:n 回から m 回の出現を表す (エスケープが必要)
拡張正規表現 (ERE)
-E
オプションありで実行した場合の挙動
.
:任意の一文字を表す?
:0回もしくは1回の出現を表す|
:任意のパターンのいずれかを表す
参考:
基本正規表現 (BRE) と拡張正規表現 (ERE) | 気ままなブログ
sed コマンド 正規表現 + の扱い – スタック・オーバーフロー
sed の正規表現で + がイメージと違う動作をします – teratail
Mac / BSD 版の違い
参考:
Mac 環境で sed を使うときの注意 | tjinjin’s blog
sed コマンド 正規表現 + の扱い – スタック・オーバーフロー
ワンライナー
参考:
ワンライナーでお手軽実行可能な sed 入門 – Qiita
ドキュメント
sed – a stream editor | GNU.org
Tips
参考: