目標
正規表現について概要を理解できる。
代表的なテキスト処理のコマンドを確認して利用できる。
正規表現の概要と記述方法
正規表現の概要と記述方法
正規表現とは
ある文字列の集合(パターン)を特殊な記号を用いて表現することを正規表現といいます。正規表現を用いて文字列の検索や置換を行うことができます。
正規表現の記述方法
正規表現の一覧表と記述例
メタ文字 | 表現内容 |
. | 任意の1文字を表現 |
* | 直前の文字の繰り返し(0回以上) |
+ | 直前の文字の繰り返し(1回以上) |
? | 直前の文字の繰り返し(0~1回) |
^文字 | 直後の文字が行頭にある |
文字$ | 直前の文字が末尾にある |
\(エスケープ) | 直後のメタ文字を通常の文字として扱う |
文字列|文字列 | 「|」の前の文字列か後の文字列のいずれか |
[文字列] | []内の文字列のいずれか1文字 |
[^文字列] | []内の文字列以外の1文字 |
[文字1–文字2] | 文字1から文字2の範囲 |
^0[5789]0-\d{4}-\d{4}$ | 携帯番号 |
\w | [a-zA-Z_0-9]と同じ意味 |
\d | [0-9]と同じ意味 |
\. | .を表現 |
メールアドレスの正規表現の例
([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+
テキスト処理コマンド(Part.3)
テキスト処理コマンド(Part.3)
テキスト処理コマンド(Part.3)
grepコマンド
ファイル内の文字列を検索するコマンドです。
文法:
grep [省略できるOP] 検索のパターン ファイル名
コマンド | grep [省略できるOP] 検索のパターン
※OP:オプションのことです。
コマンドの参考資料はこちら
grepコマンドを利用したいくつかの検索を行ってみたいと思います。
まずはファイルから該当する文字列の行数を出力します。今回は同時に2つのファイルを指定しています。
[rocky001@rockylinux001 ~]$ grep -c baseball rocky1.txt rocky2.txt
rocky1.txt:2
rocky2.txt:2
続いて、末尾に「ball」がついている文字列を検索してみます。
[rocky001@rockylinux001 ~]$ grep ball$ rocky1.txt
baseball
basketball
volleyball
basketball
volleyball
baseball
basketball
volleyball
basketball
volleyball
次は拡張正規表現「|」を利用してsoccerとgolfのいずれかに該当する文字列を検索してみます。
[rocky001@rockylinux001 ~]$ grep -E ‘soccer|golf’ rocky1.txt
soccer
golf
golf
soccer
golf
golf
soccer
golf
golf
soccer
golf
golf
最後に先頭に「b」がきて次がに任意の一文字、そしてそれを0回以上繰り返して末尾が「l」の文字列を検索してみたいと思います。
[rocky001@rockylinux001 ~]$ grep ‘^b.*l$’ rocky1.txt
sedコマンド
ファイル内の文字列に対して指定した文字列に変換(一時的な置換)を行って標準出力に出力するコマンドです。
文法:
sed [省略できるOP] コマンド ファイル名
sed -e ‘s/検索文字列/置換後の文字列’ ファイル
「e」オプションを利用するとコマンドを複数利用できます。
sed -e ‘s/abc/ABC’ -e ‘s/def/DEF’ ファイル
※OP:オプションのことです。
コマンドの参考資料はこちら
sedコマンドを利用した操作を行ってみたいと思います。まずは指定した行の範囲を非表示にしてみます。
[rocky001@rockylinux001 ~]$ sed 1,20d rocky1.txt
次は文字を検索して置換してみたいと思います。これにはsコマンドを利用します。文字を置換する場合、一行に同じ文字が複数あっても、各行で最初の文字のみが置換の対象となります。
[rocky001@rockylinux001 ~]$ sed s/a/A/ rocky1.txt
結果として「bAseball」のように変更されます。
次のようにsコマンドの最後に「g」を付けると一行に同じ文字が複数あっても全てが置換の対象となります。
[rocky001@rockylinux001 ~]$ sed s/a/A/g rocky1.txt
「bAsebAll」のようになります。
「e」オプションを利用して複数の文字列を置換できます。(置換のコマンドを複数利用できます。)
[rocky001@rockylinux001 ~]$ sed -e s/soccer/SOCCER/ -e s/golf/GOLF/ rocky1.txt
今回は以上になります。
ブックマークのすすめ
「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。