【Sed】チートシート

sed のチートシート

検索パターンと置換パターンについて

  • sed では使用できるメタキャラクタが検索パターンと置換パターンで異なる
    • s コマンド
      • 's/検索パターン/置換パターン/'
    • d コマンド
      • '/検索パターン/d'

 

メタキャラクタ

検索パターン

  • 正しくパターン判定されない場合はエスケープシーケンスを入れて切り分けること
    • 例: スペース2個以上を1個にする。「\+」では無く「+」だと '+' という文字を探していた
      • sed 's/[[:space:]]+/ /g'
特殊文字
特殊文字 パターン
. 改行以外の任意の1文字にマッチ
* 直前文字が0個以上にマッチ
^ 行頭
$ 行末
[ ] [ ]内の文字のどれかとマッチ
{n, m} 直前の文字が n から m 個とマッチ
{n, } 直前の文字が n 個以上とマッチ
\<単語\> 単語区切りでマッチ
+ 直前の正規表現が1個以上にマッチ
? 直前の正規表現が0個以上にマッチ
| ????
( ) パターンのグループ化

 

クラス文字
  • [[:alpha:]]の場合、[ ] で括っているので、「英文字が1個」という意味
  • [:alpha:]{1,} の場合、「英文字が1個以上」という意味
クラス マッチする文字
alnum 英数字
alpha 英文字
blank スペースまたはタブ
cntrl 制御文字
digit 10進数
xdigit 16進数
graph 非空白文字
lower 小文字
print 印字可能文字
space 空白文字
upper 大文字

 

置換パターン

特殊文字
特殊文字 パターン
\ 直後の特殊な文字を取り消す→ '\@hoge@d' として区切り文字を / から @に変える
\n \1 などとしてパターンマッチ部を取り出す。1〜9個まで
& 検索パターンにマッチしたテキスト全体
\u 置換パターンの1文字目を大文字にする
\U 置換パターン全体を大文字にする
\l 置換パターンの1文字目を小文字にする
\L 置換パターン全体を小文字にする

 

パターン実例

パターン マッチ内容
S[aiueo]d Sad、Sid、Sud、Sed、Sod のどれか
^...$ 1行に3文字
^\.[b] 行頭ドットで次が b → .bashrc などが該当する
^[^.]b 行頭がドットで始まらなくて、次が b で始まる→ abc などが該当する
sed* sed、seda、sedbcdef など
[a-zA-Z] 英文字
[^a-zA-Z] 英文字以外
[^0-9a-zA-Z] 英数字文字以外。 [^[:alnum:]] と同じ
[A-Z].* 英大文字1個と、それに続く0個以上の文字
[A-Z][A-Z]* 英大文字1個以上。 [A-Z]+ と同じ

 

入出力

コマンド 内容
n 現在行をスキップする (= next)
r 別ファイルの内容を読み出す
w 別ファイルに書き出す
q スクリプトを終了する

 

パターンスペースとホールドスペースの操作

h パターンスペース ホールドスペース。上書き。
H パターンスペース ホールドスペース。追加書き込み。
g パターンスペース ホールドスペース。上書き。
G パターンスペース ホールドスペース。追加書き込み。
x パターンスペース ホールドスペース。交換。

 

分岐

コマンド 内容
b ラベルへジャンプ。ラベルが無い場合はスクリプトの末尾へジャンプ
t 置換実行後のみ b と同じ処理をする
:ラベル b, t によるジャンプ先のラベルを定義する