0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

sedコマンドと拡張正規表現3

Posted at

正規表現のパターン指定をさらに完結にしたい

※「シス環系女子 season2 第9話」の備忘録です。

拡張正規表現テクニック

  • [0-9]+

全ての数字を表す。ex)0, 4, 15, 100, 2021, etc...
正規表現の「+」や「*」は、前の文字の表現の繰り返しを表す。

以下テストデータ

$ cat test_for_sed2.log 
category100a
category200b
category300c

以下は2つは同じ意味。
※mac os で「-e」で後方参照が実行できなかった。

$ cat test_for_sed2.log | sed -E "s/category(100|200|300)/category-\1-/"
category-100-a
category-200-b
category-300-c
$ cat test_for_sed2.log | sed -E "s/category([0-9]+)/category-\1-/"
category-100-a
category-200-b
category-300-c
  • [^]

ブラケットの中で使うことで後に続く文字列以外を表す。
※「キャレット」あるいは「ハット」と読む。

ex)[a-d]=a~dの文字列ならなんでも良い。
ex)[^a-d]=a~d以外の文字列ならなんでも良い。
ex)[^:]=:以外の文字列ならなんでも良い。

以下テストデータ

$ cat test_for_sed3.log 
http://192.160.11.150:3000/
http://penguin:3000/

以下2つは同じ意味

$ cat test_for_sed3.log | sed -E "s/(192.160.11.150|penguin):3000/\1:13000/"
http://192.160.11.150:13000/
http://penguin:13000/
$ cat test_for_sed3.log | sed -E "s#(://[^:]+):3000#\1:13000#"
http://192.160.11.150:13000/
http://penguin:13000/
  • ^

行の先頭文字列のみ表す拡張正規表現。

以下テストデータ

$ cat test_for_sed4.log 
# 拡張正規表現のテストデータ
 - hoge
  - fuga - fuga
  - piyo - piyo
   - foo - foo - foo
   - bar - bar - bar
  - baz - baz

項目文字の「-」を「*」に変換したい時。
以下だと文字列中の「-」まで変換されてしまう。

$ cat test_for_sed4.log | sed -E "s/( |  |   )- /\1* /g"
# 拡張正規表現のテストデータ
 * hoge
  * fuga * fuga
  * piyo * piyo
   * foo * foo * foo
   * bar * bar * bar
  * baz * baz

そこで先頭文字を表す「^」を使うようにする。
以下、その例。

$ cat test_for_sed4.log | sed -E "s/^( |  |   )- /\1* /g"
# 拡張正規表現のテストデータ
 * hoge
  * fuga - fuga
  * piyo - piyo
   * foo - foo - foo
   * bar - bar - bar
  * baz - baz

さらにスペースの表現を以下のように変えるとスッキリする。

$ cat test_for_sed4.log | sed -E "s/^( +)- /\1* /g"
# 拡張正規表現のテストデータ
 * hoge
  * fuga - fuga
  * piyo - piyo
   * foo - foo - foo
   * bar - bar - bar
  * baz - baz
  • $

文字列の最後を表す。

$ cat test_for_sed5.log 
hoge。
fuga。fuga。
piyo。piyo。piyo。

以下のように使うことで、最後の「。」だけ変換させることができる。

$ cat test_for_sed5.log | sed -E "s/。$/./"
hoge.
fuga。fuga.
piyo。piyo。piyo.
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?