【Sed活用講座】文字列中の特定の記号を一括削除する方法
$0
--slurp
はじめに
Sedで使う基本的な正規表現
Gnu sed
BSD sed
-e/--expression
-r/--regexp-extended
-r
用途 | Sed(-rオプション) | sed(-eオプション) |
---|---|---|
文字エスケープ | \ | \ |
任意の1文字 | . | . |
数字1文字 | \d か [0-9] | \d か [0-9] |
数字以外の1文字 | \D か [^0-9] | \D か [^0-9] |
アルファベットか数字かアンダーバーの1文字 | \w か [a-zA-Z_0-9] | \w か [a-zA-Z_0-9] |
アルファベットか数字かアンダーバー以外の1文字 | \W か [^a-zA-Z_0-9] | \W か [^a-zA-Z_0-9] |
空白文字 | \s か [ \n\r\f\t] | \s か [ \n\r\f\t] |
空白文字以外 | \S か [^ \n\r\f\t] | \S か [^ \n\r\f\t] |
パターンどれかにマッチ | パターンA|パターンB|パターンC | パターンA\|パターンB\|パターンC |
グループ化 | (パターン) | \(パターン\) |
...とグループ化でキャプチャした値の取得 | \1 | \1 |
パターンが先頭 | ^パターン | ^パターン |
パターンが末尾 | パターン$ | パターン$ |
パターンが0または1回 | パターン? | パターン\? |
パターンが0回以上 | パターン* | パターン* |
パターンが1回以上 | パターン+ | パターン\+ |
パターンがm回 | パターン{m} | パターン\{m\} |
パターンがm回以上 | パターン{m,} | パターン\{m,\} |
パターンがn回以下 | パターン{,n} | パターン\{,n\} |
パターンがm回以上、n回以下 | パターン{m,n} | パターン\{m,n\} |
呼び出し | 定義 |
---|---|
[:alpha:] | アルファベット |
[:alnum:] | アルファベットと数字 |
[:digit:] | 数字 |
[:xdigit:] | 数字(十六進数も含む) |
[:lower:] | アルファベットの小文字 |
[:upper:] | アルファベットの大文字 |
[:blank:] | 空白文字(スペース/タブ等) |
[:graph:] | 非空白文字(表示可能文字) |
[:cntrl:] | 制御文字 |
[:print:] | 表示可能文字(制御文字以外) |
[:space:] | スペース/タブ/改行文字 |
[:punct:] | 句読点(通常文字/数字/制御文字/スペース文字以外) |
#👇スペースを全部消去
$ echo 'a b c d e f g' | sed -r 's/[[:space:]]//g'
abcdefg
#👇16進数(0-9a-fA-F)を全部消去
$ echo 'HEX: 01 2e 24 a5 8c 2f de' | sed -r 's/[[:xdigit:]]//g'
HX:
実践例① ~ 囲い文字の全消去
"
$ sed -r 's/"//g' <<EOF
"aaa"
"100","9"
"1 2 3 4 5",,,41,"冷麦"
EOF
#👇出力
aaa
100,9
1 2 3 4 5,,,41,冷麦
"
'
$ sed -r "s/\"|'//g" << EOF
"aaa",'bbb'
"100",'rgb',"9"
"1 2 3 4 5",'3','8',41,"冷麦"
EOF
#👇出力
aaa,bbb
100,rgb,9
1 2 3 4 5,3,8,41,冷麦
$ sed -r "s/[\"']//g" << EOF
"aaa",'bbb'
"100",'rgb',"9"
"1 2 3 4 5",'3','8',41,"冷麦"
EOF
#👇出力
aaa,bbb
100,rgb,9
1 2 3 4 5,3,8,41,冷麦
"
\"
'
'...'スコープ外'....'
$ sed -r 's/"|'"'"'//g' << EOF
"aaa",'bbb'
"100",'rgb',"9"
"1 2 3 4 5",'3','8',41,"冷麦"
EOF
#👇出力
aaa,bbb
100,rgb,9
1 2 3 4 5,3,8,41,冷麦
EOF
's/"|'
"'"
'//g'
デリミタを変える
/
/
/
/
$ sed -r 's@"@@g' <<EOF
"aaa"
"100","9"
"1 2 3 4 5",,,41,"冷麦"
EOF
aaa
100,9
1 2 3 4 5,,,41,冷麦
実践例② ~ 全角の数字やアルファベットを半角へ一括変換
y/置換前文字リスト/置換後文字リスト/
$ echo 'ABcdefg0123456789' | sed '
y/0123456789/0123456789/;
y/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/;
y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
'
ABcdefg0123456789
locate
#👇マルチバイト文字未対応の環境
$ echo 'ABcdefg0123456789' | sed '
y/0123456789/0123456789/;
y/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/;
y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
'
A01Fcd0bo0brg012101801�401�6701�01�
echo 'ABcdefg0123456789' | sed -e '
s/0/0/g;s/1/1/g;s/2/2/g;s/3/3/g;s/4/4/g;s/5/5/g;s/6/6/g;s/7/7/g;s/8/8/g;s/9/9/g;
s/a/a/g;s/b/b/g;s/c/c/g;s/d/d/g;s/e/e/g;s/f/f/g;s/g/g/g;s/h/h/g;s/i/i/g;s/j/j/g;s/k/k/g;s/l/l/g;s/m/m/g;s/n/n/g;s/o/o/g;s/p/p/g;s/q/q/g;s/r/r/g;s/s/s/g;s/t/t/g;s/u/u/g;s/v/v/g;s/w/w/g;s/x/x/g;s/y/y/g;s/z/z/g;
s/A/A/g;s/B/B/g;s/C/C/g;s/D/D/g;s/E/E/g;s/F/F/g;s/G/G/g;s/H/H/g;s/I/I/g;s/J/J/g;s/K/K/g;s/L/L/g;s/M/M/g;s/N/N/g;s/O/O/g;s/P/P/g;s/Q/Q/g;s/R/R/g;s/S/S/g;s/T/T/g;s/U/U/g;s/V/V/g;s/W/W/g;s/X/X/g;s/Y/Y/g;s/Z/Z/g;
'
ABcdefg0123456789
まとめ
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。