正規表現
あるパターンの文字列を表現する手段として正規表現があり、特定の文字列パターンを簡潔に表現できる
※正規表現とワイルドカードは異なるので注意
正規表現に使われるメタキャラクタ
| . | 任意の1文字 |
| ^ | 行頭 |
| $ | 行末 |
| * | 直前の文字の0回以上の繰り返し(0個も含む) |
| [ ] | []で囲まれた文字のいずれか1文字
[-]で範囲指定
[^]で指定された文字以外を指定 |
| \ | 直後の1文字(メタキャラクタ)を通常の文字として処理 |
sedによるテキストストリームの加工とgrepによるファイル検索
| sed [オプション] [コマンド] [ファイル名] | セッド |
文字の変換を行う
主なオプション
-e:コマンドを指定
-f:コマンドが記述されたスクリプトを指定
主なコマンド
d 行を削除
s/ / /:それぞれの行で最初に一致した文字列だけ置換(s/パターン/置換文字列/)
s/ / /g:全体を置換(s/パターン/置換文字列/g)
s/ / /数値:それぞれの行で指定した数値番目の文字列だけ置換(s/パターン/置換文字列/数値) |
| grep [オプション] 検索パターン [ファイル名] | グレップ |
ファイル内の特定の文字列を含む行を検索する
-c:マッチした行数のみ表示
-n:マッチした行と行番号を表示
-v:マッチしない行を表示
-i:大文字と小文字の区別をしない
-f:ファイルから検索パターンを読み込んで検索する
-E:拡張された正規表現も使用する |
$ cat regulare.txt
Linux OS
Fedora Core
Web Server
LinuxProfessionalInstitute
UNIX
Linux,Windows,FreeBSD
LLLINUX
$ sed s/UNIX/Linux/g regulare.txt
←文字列「UNIX」を「Linux」に変換
Linux OS
Fedora Core
Web Server
LinuxProfessionalInstitute
Linux
←変換されている
Linux,Windows,FreeBSD
LLLINUX
$ sed 's/^/#/' regulare.txt
←行頭に「#」を追加
#Linux OS
#Fedora Core
#Web Server
#LinuxProfessionalInstitute
#UNIX
#Linux,Windows,FreeBSD
#LLLINUX
※コマンドを「's/^/#/g'」にしても結果は同じになる。
(1行の中に、行頭は1つしか無いため)
$ sed 's/L./\*/g' regulare.txt
←「L」に続く何か1文字の計2文字を「*」に変換
*nux OS
←「Li」が「*」に変換されている
Fedora Core
←「L」が無いので変換されてない
Web Server
*nuxProfessionalInstitute
UNIX
*nux,Windows,FreeBSD
**NUX
←「LL」と「LI」が「*」に変換されている
$ sed 's/L*/#/g' regulare.txt
←0個以上の「L」を「#」に変換
#i#n#u#x# #O#S#
←「L」は「#」に変換されている為、削除されている
#F#e#d#o#r#a# #C#o#r#e#
←各文字の間に0個の「L」が有ると見なされ
「#」が挿入される
#W#e#b# #S#e#r#v#e#r#
#i#n#u#x#P#r#o#f#e#s#s#i#o#n#a#l#I#n#s#t#i#t#u#t#e#
#U#N#I#X#
#i#n#u#x#,#W#i#n#d#o#w#s#,#F#r#e#e#B#S#D#
#I#N#U#X#
$ sed 's/[A-L]/#/g' regulare.txt
←大文字の「A」〜「L」を「#」に変換
#inux OS
#edora #ore
←「F」と「C」が変換されている
Web Server
#inuxProfessional#nstitute
UN#X
←「UN」「X」は変換されない
#inux,Windows,#ree#S#
####NUX
$ sed 's/[^A-L]/#/' regulare.txt
←最初に条件に一致するものだけ変換
L#nux OS
←条件が「A」〜「L」以外なので「i」が変換されている
F#dora Core
←「dora」と「ore」も条件に合うが
オプションが最初に一致するものだけなので変換されない
#eb Server
L#nuxProfessionalInstitute
#NIX
L#nux,Windows,FreeBSD
LLLI#UX
|