助け合いフォーラム
LinuC Lv1-101(Ver10.0)
問題ID : 14864
問題を開く
以下の「test.txt」ファイルにある「ping-t」を「HOGE」に変換して出力したい。
適切なコマンドを答えなさい。
$ cat test.txt
ping-t is synthesis WEB study site.
PING-T keeps always assisting in you.
適切なコマンドを答えなさい。
$ cat test.txt
ping-t is synthesis WEB study site.
PING-T keeps always assisting in you.
正解
sed -e 's/p....t/HOGE/g' test.txt
解説
ファイルや標準入力の内容を編集して表示するにはsedコマンドを利用します。
sedコマンドの書式と主なオプション・編集コマンドは以下のとおりです。
sed [オプション] 編集コマンド [ファイル名]
sed [オプション] -e 編集コマンド1 [-e 編集コマンド2 ...] [ファイル名]
sed [オプション] -f スクリプト [ファイル名]
![<img src="/mondai3/img/jpg/k45049.jpg">](https://ping-t-production-strg.s3.ap-northeast-1.amazonaws.com/uploads/question_image/file/11535/k45049.jpg?X-Amz-Expires=600&X-Amz-Date=20240727T023617Z&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEAYaDmFwLW5vcnRoZWFzdC0xIkcwRQIgZGbfF1GoEDO%2FYrfCsXwfFSjCKj1RvjjY73XrK7%2BQmNoCIQDQepXbON3IQIjPhJHvDWmfx7QZLZ38Eufauz3VD8MrMyqxBAjf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDYyMzQyOTgyNzI3NSIMN422Dczg4LODIH7UKoUEAQgot%2FkaKm0ycrY0esL1EN%2Fd8yPeY1B0QFsipqtIABA1SdaGl3RwYaxW09JrRsZCI64Zk4KkOBPvzL%2FMkx8c8c8gmEvs0u4A40Cua4V5YIxMhs8PuNvZQW2ICoSi9GVcILgRjhGXvjQxZtHC2hGEG5f0016Y2ZGR8AhwBhRMD4vLmOTIngn2xqwRp6O9A%2FSuGoAf8pcTscE4NyRQ6hrfv2mhzSuq3BwTtE4LtZcJK%2B0cj2nQu5chUJtJ8B3jbX04Mil%2BVIJoutTSsGgy%2FPzC9EsaDmydOSESyOI8zsIeObqNo2%2BtCfgBsBlPy8sIFPIaWk7e2q9j9Jn18c2rndsn8Nt955J%2F%2F91JpdvbuTXWa3dSTnvM18t9OHyR6NBJrkbZOggFlXR4BqCZbwf2oUllVG9uulGiaItDV7QmMr2mvJ16seiRZ1jbzPIDLvAqFrOZsoh9ibS3i%2Fcco6Xv%2Fwj%2F5Q2%2FnJmQeoj2f5njnGgr%2Bkh91qXkq2FCdvp9kM2fRXKw7LXzNA5zjZdw7jEjmYYEKO3kfRt%2BmqAUAGHbjWD6ZORaeOZ6SyeE%2BciAA%2F8uRtuTVaP6rYsYw9IXoT3lGJ1QiwWHNbGlyNop%2F76tqMn90JcgNqKDnM%2FsAlWGFVi%2FEg28vzgaqnTthI%2Fz9PwO9v4KQLIQFo4vbTBEKC1K2tWHh%2FZT80vnXjDyvZC1BjqmAQac2E5lk6HQlBuIP81mejR4mAHvW19rMqK8fPWiS5T8snoCbT35rOShhx1mBdzRzs%2FPfy6Pa1X%2B67U%2BYNoGExGt4QVAmzs4QUnkOre3y20krCO%2BzqIr%2BdZZltTxih7YSet0NWSGAdu4pqWJvyjJfaMU6Aqiq0XQOa7bCEgdRby39OQNS6VWw3ah5PRFigfyolbI7tQ2FIOnXTRc1vTBrgvbZvF9yAY%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAZCJ2QHLFV3Q5B6V3%2F20240727%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature=62d13a5526e3694273f286670c9988afa900eeb3d57caed0410f11cde4c574c6)
上表より、文字列を置換する編集コマンドは「s/文字列1/文字列2/g」です。
選択肢の中で文字列1にあたる「ping-t」にマッチするのは、「p」と「t」の間に任意の4文字を表している「p....t」です。
したがって正解は
・sed -e 's/p....t/HOGE/g' test.txt
です。
以下は実行例です。
$ cat test.txt
ping-t is synthesis WEB study site.
PING-T keeps always assisting in you.
$
$ sed -e 's/p....t/HOGE/g' test.txt
HOGE is synthesis WEB study site.
PING-T keeps always assisting in you.
その他の選択肢については以下のとおりです。
・sed -e 's/ping/HOGE/g' test.txt
pingをHOGEに変換しますので、誤りです。
【実行結果】
HOGE-t is synthesis WEB study site.
PING-T keeps always assisting in you.
・sed -e 's/p*t/HOGE/g' test.txt
pが0文字以上続いてtで終わる文字列(t,pt,ppt,ppptなど)をHOGEに変換しますので、誤りです。
【実行結果】
ping-HOGE is synHOGEhesis WEB sHOGEudy siHOGEe.
PING-T keeps always assisHOGEing in you.
・sed -e 's/p.*t/HOGE/g' test.txt
pではじまり任意の文字列を挟み、tで終わる文字列をHOGEに変換しますので、誤りです。
【実行結果】
HOGEe.
PING-T keeHOGEing in you.
なお、「p.*t」のパターンに合致するのは、一行目の「ping-t」ではなく、先頭の「p」から「site」の「t」までです。
正規表現には、最も左から、最も長く一致するものにマッチするという法則があります。
・sed -e 's/[ping-t]/HOGE/g' test.txt
p,i,nおよび、gからtのいずれかの文字をHOGEに変換しますので、誤りです。
【実行結果】
HOGEHOGEHOGEHOGE-HOGE HOGEHOGE HOGEyHOGEHOGEHOGEeHOGEHOGEHOGE WEB HOGEHOGEudy HOGEHOGEHOGEe.
PING-T HOGEeeHOGEHOGE aHOGEwayHOGE aHOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGE HOGEHOGE yHOGEu.
sedコマンドの書式と主なオプション・編集コマンドは以下のとおりです。
sed [オプション] 編集コマンド [ファイル名]
sed [オプション] -e 編集コマンド1 [-e 編集コマンド2 ...] [ファイル名]
sed [オプション] -f スクリプト [ファイル名]
![<img src="/mondai3/img/jpg/k45049.jpg">](https://ping-t-production-strg.s3.ap-northeast-1.amazonaws.com/uploads/question_image/file/11535/k45049.jpg?X-Amz-Expires=600&X-Amz-Date=20240727T023617Z&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEAYaDmFwLW5vcnRoZWFzdC0xIkcwRQIgZGbfF1GoEDO%2FYrfCsXwfFSjCKj1RvjjY73XrK7%2BQmNoCIQDQepXbON3IQIjPhJHvDWmfx7QZLZ38Eufauz3VD8MrMyqxBAjf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDYyMzQyOTgyNzI3NSIMN422Dczg4LODIH7UKoUEAQgot%2FkaKm0ycrY0esL1EN%2Fd8yPeY1B0QFsipqtIABA1SdaGl3RwYaxW09JrRsZCI64Zk4KkOBPvzL%2FMkx8c8c8gmEvs0u4A40Cua4V5YIxMhs8PuNvZQW2ICoSi9GVcILgRjhGXvjQxZtHC2hGEG5f0016Y2ZGR8AhwBhRMD4vLmOTIngn2xqwRp6O9A%2FSuGoAf8pcTscE4NyRQ6hrfv2mhzSuq3BwTtE4LtZcJK%2B0cj2nQu5chUJtJ8B3jbX04Mil%2BVIJoutTSsGgy%2FPzC9EsaDmydOSESyOI8zsIeObqNo2%2BtCfgBsBlPy8sIFPIaWk7e2q9j9Jn18c2rndsn8Nt955J%2F%2F91JpdvbuTXWa3dSTnvM18t9OHyR6NBJrkbZOggFlXR4BqCZbwf2oUllVG9uulGiaItDV7QmMr2mvJ16seiRZ1jbzPIDLvAqFrOZsoh9ibS3i%2Fcco6Xv%2Fwj%2F5Q2%2FnJmQeoj2f5njnGgr%2Bkh91qXkq2FCdvp9kM2fRXKw7LXzNA5zjZdw7jEjmYYEKO3kfRt%2BmqAUAGHbjWD6ZORaeOZ6SyeE%2BciAA%2F8uRtuTVaP6rYsYw9IXoT3lGJ1QiwWHNbGlyNop%2F76tqMn90JcgNqKDnM%2FsAlWGFVi%2FEg28vzgaqnTthI%2Fz9PwO9v4KQLIQFo4vbTBEKC1K2tWHh%2FZT80vnXjDyvZC1BjqmAQac2E5lk6HQlBuIP81mejR4mAHvW19rMqK8fPWiS5T8snoCbT35rOShhx1mBdzRzs%2FPfy6Pa1X%2B67U%2BYNoGExGt4QVAmzs4QUnkOre3y20krCO%2BzqIr%2BdZZltTxih7YSet0NWSGAdu4pqWJvyjJfaMU6Aqiq0XQOa7bCEgdRby39OQNS6VWw3ah5PRFigfyolbI7tQ2FIOnXTRc1vTBrgvbZvF9yAY%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAZCJ2QHLFV3Q5B6V3%2F20240727%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature=62d13a5526e3694273f286670c9988afa900eeb3d57caed0410f11cde4c574c6)
上表より、文字列を置換する編集コマンドは「s/文字列1/文字列2/g」です。
選択肢の中で文字列1にあたる「ping-t」にマッチするのは、「p」と「t」の間に任意の4文字を表している「p....t」です。
したがって正解は
・sed -e 's/p....t/HOGE/g' test.txt
です。
以下は実行例です。
$ cat test.txt
ping-t is synthesis WEB study site.
PING-T keeps always assisting in you.
$
$ sed -e 's/p....t/HOGE/g' test.txt
HOGE is synthesis WEB study site.
PING-T keeps always assisting in you.
その他の選択肢については以下のとおりです。
・sed -e 's/ping/HOGE/g' test.txt
pingをHOGEに変換しますので、誤りです。
【実行結果】
HOGE-t is synthesis WEB study site.
PING-T keeps always assisting in you.
・sed -e 's/p*t/HOGE/g' test.txt
pが0文字以上続いてtで終わる文字列(t,pt,ppt,ppptなど)をHOGEに変換しますので、誤りです。
【実行結果】
ping-HOGE is synHOGEhesis WEB sHOGEudy siHOGEe.
PING-T keeps always assisHOGEing in you.
・sed -e 's/p.*t/HOGE/g' test.txt
pではじまり任意の文字列を挟み、tで終わる文字列をHOGEに変換しますので、誤りです。
【実行結果】
HOGEe.
PING-T keeHOGEing in you.
なお、「p.*t」のパターンに合致するのは、一行目の「ping-t」ではなく、先頭の「p」から「site」の「t」までです。
正規表現には、最も左から、最も長く一致するものにマッチするという法則があります。
・sed -e 's/[ping-t]/HOGE/g' test.txt
p,i,nおよび、gからtのいずれかの文字をHOGEに変換しますので、誤りです。
【実行結果】
HOGEHOGEHOGEHOGE-HOGE HOGEHOGE HOGEyHOGEHOGEHOGEeHOGEHOGEHOGE WEB HOGEHOGEudy HOGEHOGEHOGEe.
PING-T HOGEeeHOGEHOGE aHOGEwayHOGE aHOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGE HOGEHOGE yHOGEu.
参考
正規表現とは、文字列の特定のパターンを認識する為に使用する表現方法です。文字列の検索や置換などを行う際に利用します。正規表現には基本正規表現(BRE: Basic Regular Expression)と拡張正規表現(ERE: Extended Regular Expression)があります。
以下は主な正規表現とその使用例をまとめたものです。
![【図を表示】](https://ping-t-production-strg.s3.ap-northeast-1.amazonaws.com/uploads/question_image/file/11306/k45041.jpg?X-Amz-Expires=600&X-Amz-Date=20240727T023617Z&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEAYaDmFwLW5vcnRoZWFzdC0xIkcwRQIgZGbfF1GoEDO%2FYrfCsXwfFSjCKj1RvjjY73XrK7%2BQmNoCIQDQepXbON3IQIjPhJHvDWmfx7QZLZ38Eufauz3VD8MrMyqxBAjf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDYyMzQyOTgyNzI3NSIMN422Dczg4LODIH7UKoUEAQgot%2FkaKm0ycrY0esL1EN%2Fd8yPeY1B0QFsipqtIABA1SdaGl3RwYaxW09JrRsZCI64Zk4KkOBPvzL%2FMkx8c8c8gmEvs0u4A40Cua4V5YIxMhs8PuNvZQW2ICoSi9GVcILgRjhGXvjQxZtHC2hGEG5f0016Y2ZGR8AhwBhRMD4vLmOTIngn2xqwRp6O9A%2FSuGoAf8pcTscE4NyRQ6hrfv2mhzSuq3BwTtE4LtZcJK%2B0cj2nQu5chUJtJ8B3jbX04Mil%2BVIJoutTSsGgy%2FPzC9EsaDmydOSESyOI8zsIeObqNo2%2BtCfgBsBlPy8sIFPIaWk7e2q9j9Jn18c2rndsn8Nt955J%2F%2F91JpdvbuTXWa3dSTnvM18t9OHyR6NBJrkbZOggFlXR4BqCZbwf2oUllVG9uulGiaItDV7QmMr2mvJ16seiRZ1jbzPIDLvAqFrOZsoh9ibS3i%2Fcco6Xv%2Fwj%2F5Q2%2FnJmQeoj2f5njnGgr%2Bkh91qXkq2FCdvp9kM2fRXKw7LXzNA5zjZdw7jEjmYYEKO3kfRt%2BmqAUAGHbjWD6ZORaeOZ6SyeE%2BciAA%2F8uRtuTVaP6rYsYw9IXoT3lGJ1QiwWHNbGlyNop%2F76tqMn90JcgNqKDnM%2FsAlWGFVi%2FEg28vzgaqnTthI%2Fz9PwO9v4KQLIQFo4vbTBEKC1K2tWHh%2FZT80vnXjDyvZC1BjqmAQac2E5lk6HQlBuIP81mejR4mAHvW19rMqK8fPWiS5T8snoCbT35rOShhx1mBdzRzs%2FPfy6Pa1X%2B67U%2BYNoGExGt4QVAmzs4QUnkOre3y20krCO%2BzqIr%2BdZZltTxih7YSet0NWSGAdu4pqWJvyjJfaMU6Aqiq0XQOa7bCEgdRby39OQNS6VWw3ah5PRFigfyolbI7tQ2FIOnXTRc1vTBrgvbZvF9yAY%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAZCJ2QHLFV3Q5B6V3%2F20240727%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature=e81365afc11c0c57e7b94e04db273b8168742ba58c36ff1dd384b7a678d62062)
なお、正規表現の「*」と、シェルによって解釈されるメタキャラクタの「*」では意味が異なるので注意してください。シェルは「*」を0文字以上の文字列と解釈します。
正規表現は明示的に「'」(シングルクォーテーション)や「"」(ダブルクォーテーション)の引用符で囲う事ができます。これらの引用符で囲まれた正規表現の記号は、シェルにメタキャラクタとして扱われなくなります。
正規表現を利用する主なコマンドは以下のとおりです。
・grep
ファイルや標準入力から、検索パターンにマッチする文字列を含む行を抽出するコマンド
なお、「-E」オプションを併用すると拡張正規表現が使えます(egrepコマンドと同様)。
・sed
ファイルや標準入力の内容を編集して表示するコマンド
例1)1から5までのいずれかの文字がある行を「test.txt」ファイルから抽出する場合
$ grep '[1-5]' test.txt
例2)「test.txt」ファイルの「#」から始まる行を削除して出力する場合
$ sed '/^#/d' test.txt
基本正規表現と拡張正規表現の違いに注意してください。grepコマンドは、-Eオプションを付けないと検索パターンを基本正規表現と判断しますので、上表の拡張正規表現が使えません。
実行例)
![【図を表示2】](https://ping-t-production-strg.s3.ap-northeast-1.amazonaws.com/uploads/question_image/file/11307/kk45041.jpg?X-Amz-Expires=600&X-Amz-Date=20240727T023617Z&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEAYaDmFwLW5vcnRoZWFzdC0xIkcwRQIgZGbfF1GoEDO%2FYrfCsXwfFSjCKj1RvjjY73XrK7%2BQmNoCIQDQepXbON3IQIjPhJHvDWmfx7QZLZ38Eufauz3VD8MrMyqxBAjf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDYyMzQyOTgyNzI3NSIMN422Dczg4LODIH7UKoUEAQgot%2FkaKm0ycrY0esL1EN%2Fd8yPeY1B0QFsipqtIABA1SdaGl3RwYaxW09JrRsZCI64Zk4KkOBPvzL%2FMkx8c8c8gmEvs0u4A40Cua4V5YIxMhs8PuNvZQW2ICoSi9GVcILgRjhGXvjQxZtHC2hGEG5f0016Y2ZGR8AhwBhRMD4vLmOTIngn2xqwRp6O9A%2FSuGoAf8pcTscE4NyRQ6hrfv2mhzSuq3BwTtE4LtZcJK%2B0cj2nQu5chUJtJ8B3jbX04Mil%2BVIJoutTSsGgy%2FPzC9EsaDmydOSESyOI8zsIeObqNo2%2BtCfgBsBlPy8sIFPIaWk7e2q9j9Jn18c2rndsn8Nt955J%2F%2F91JpdvbuTXWa3dSTnvM18t9OHyR6NBJrkbZOggFlXR4BqCZbwf2oUllVG9uulGiaItDV7QmMr2mvJ16seiRZ1jbzPIDLvAqFrOZsoh9ibS3i%2Fcco6Xv%2Fwj%2F5Q2%2FnJmQeoj2f5njnGgr%2Bkh91qXkq2FCdvp9kM2fRXKw7LXzNA5zjZdw7jEjmYYEKO3kfRt%2BmqAUAGHbjWD6ZORaeOZ6SyeE%2BciAA%2F8uRtuTVaP6rYsYw9IXoT3lGJ1QiwWHNbGlyNop%2F76tqMn90JcgNqKDnM%2FsAlWGFVi%2FEg28vzgaqnTthI%2Fz9PwO9v4KQLIQFo4vbTBEKC1K2tWHh%2FZT80vnXjDyvZC1BjqmAQac2E5lk6HQlBuIP81mejR4mAHvW19rMqK8fPWiS5T8snoCbT35rOShhx1mBdzRzs%2FPfy6Pa1X%2B67U%2BYNoGExGt4QVAmzs4QUnkOre3y20krCO%2BzqIr%2BdZZltTxih7YSet0NWSGAdu4pqWJvyjJfaMU6Aqiq0XQOa7bCEgdRby39OQNS6VWw3ah5PRFigfyolbI7tQ2FIOnXTRc1vTBrgvbZvF9yAY%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAZCJ2QHLFV3Q5B6V3%2F20240727%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature=8288a3818e79add8624495531c17af44f20304804ecaaa093a6ae839edf08283)
基本正規表現では「?, +」は「\?, \+」とすることで、拡張正規表現と同様の意味を持つようになります。
![【図を表示3】](https://ping-t-production-strg.s3.ap-northeast-1.amazonaws.com/uploads/question_image/file/11308/kkk45041.jpg?X-Amz-Expires=600&X-Amz-Date=20240727T023617Z&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEAYaDmFwLW5vcnRoZWFzdC0xIkcwRQIgZGbfF1GoEDO%2FYrfCsXwfFSjCKj1RvjjY73XrK7%2BQmNoCIQDQepXbON3IQIjPhJHvDWmfx7QZLZ38Eufauz3VD8MrMyqxBAjf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDYyMzQyOTgyNzI3NSIMN422Dczg4LODIH7UKoUEAQgot%2FkaKm0ycrY0esL1EN%2Fd8yPeY1B0QFsipqtIABA1SdaGl3RwYaxW09JrRsZCI64Zk4KkOBPvzL%2FMkx8c8c8gmEvs0u4A40Cua4V5YIxMhs8PuNvZQW2ICoSi9GVcILgRjhGXvjQxZtHC2hGEG5f0016Y2ZGR8AhwBhRMD4vLmOTIngn2xqwRp6O9A%2FSuGoAf8pcTscE4NyRQ6hrfv2mhzSuq3BwTtE4LtZcJK%2B0cj2nQu5chUJtJ8B3jbX04Mil%2BVIJoutTSsGgy%2FPzC9EsaDmydOSESyOI8zsIeObqNo2%2BtCfgBsBlPy8sIFPIaWk7e2q9j9Jn18c2rndsn8Nt955J%2F%2F91JpdvbuTXWa3dSTnvM18t9OHyR6NBJrkbZOggFlXR4BqCZbwf2oUllVG9uulGiaItDV7QmMr2mvJ16seiRZ1jbzPIDLvAqFrOZsoh9ibS3i%2Fcco6Xv%2Fwj%2F5Q2%2FnJmQeoj2f5njnGgr%2Bkh91qXkq2FCdvp9kM2fRXKw7LXzNA5zjZdw7jEjmYYEKO3kfRt%2BmqAUAGHbjWD6ZORaeOZ6SyeE%2BciAA%2F8uRtuTVaP6rYsYw9IXoT3lGJ1QiwWHNbGlyNop%2F76tqMn90JcgNqKDnM%2FsAlWGFVi%2FEg28vzgaqnTthI%2Fz9PwO9v4KQLIQFo4vbTBEKC1K2tWHh%2FZT80vnXjDyvZC1BjqmAQac2E5lk6HQlBuIP81mejR4mAHvW19rMqK8fPWiS5T8snoCbT35rOShhx1mBdzRzs%2FPfy6Pa1X%2B67U%2BYNoGExGt4QVAmzs4QUnkOre3y20krCO%2BzqIr%2BdZZltTxih7YSet0NWSGAdu4pqWJvyjJfaMU6Aqiq0XQOa7bCEgdRby39OQNS6VWw3ah5PRFigfyolbI7tQ2FIOnXTRc1vTBrgvbZvF9yAY%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAZCJ2QHLFV3Q5B6V3%2F20240727%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature=eb0b6ecc02b1876d5539c880e1414e59ba8d05d1cbecef695fbe3c80cd6cbf63)
以下は主な正規表現とその使用例をまとめたものです。
![【図を表示】](https://ping-t-production-strg.s3.ap-northeast-1.amazonaws.com/uploads/question_image/file/11306/k45041.jpg?X-Amz-Expires=600&X-Amz-Date=20240727T023617Z&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEAYaDmFwLW5vcnRoZWFzdC0xIkcwRQIgZGbfF1GoEDO%2FYrfCsXwfFSjCKj1RvjjY73XrK7%2BQmNoCIQDQepXbON3IQIjPhJHvDWmfx7QZLZ38Eufauz3VD8MrMyqxBAjf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDYyMzQyOTgyNzI3NSIMN422Dczg4LODIH7UKoUEAQgot%2FkaKm0ycrY0esL1EN%2Fd8yPeY1B0QFsipqtIABA1SdaGl3RwYaxW09JrRsZCI64Zk4KkOBPvzL%2FMkx8c8c8gmEvs0u4A40Cua4V5YIxMhs8PuNvZQW2ICoSi9GVcILgRjhGXvjQxZtHC2hGEG5f0016Y2ZGR8AhwBhRMD4vLmOTIngn2xqwRp6O9A%2FSuGoAf8pcTscE4NyRQ6hrfv2mhzSuq3BwTtE4LtZcJK%2B0cj2nQu5chUJtJ8B3jbX04Mil%2BVIJoutTSsGgy%2FPzC9EsaDmydOSESyOI8zsIeObqNo2%2BtCfgBsBlPy8sIFPIaWk7e2q9j9Jn18c2rndsn8Nt955J%2F%2F91JpdvbuTXWa3dSTnvM18t9OHyR6NBJrkbZOggFlXR4BqCZbwf2oUllVG9uulGiaItDV7QmMr2mvJ16seiRZ1jbzPIDLvAqFrOZsoh9ibS3i%2Fcco6Xv%2Fwj%2F5Q2%2FnJmQeoj2f5njnGgr%2Bkh91qXkq2FCdvp9kM2fRXKw7LXzNA5zjZdw7jEjmYYEKO3kfRt%2BmqAUAGHbjWD6ZORaeOZ6SyeE%2BciAA%2F8uRtuTVaP6rYsYw9IXoT3lGJ1QiwWHNbGlyNop%2F76tqMn90JcgNqKDnM%2FsAlWGFVi%2FEg28vzgaqnTthI%2Fz9PwO9v4KQLIQFo4vbTBEKC1K2tWHh%2FZT80vnXjDyvZC1BjqmAQac2E5lk6HQlBuIP81mejR4mAHvW19rMqK8fPWiS5T8snoCbT35rOShhx1mBdzRzs%2FPfy6Pa1X%2B67U%2BYNoGExGt4QVAmzs4QUnkOre3y20krCO%2BzqIr%2BdZZltTxih7YSet0NWSGAdu4pqWJvyjJfaMU6Aqiq0XQOa7bCEgdRby39OQNS6VWw3ah5PRFigfyolbI7tQ2FIOnXTRc1vTBrgvbZvF9yAY%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAZCJ2QHLFV3Q5B6V3%2F20240727%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature=e81365afc11c0c57e7b94e04db273b8168742ba58c36ff1dd384b7a678d62062)
なお、正規表現の「*」と、シェルによって解釈されるメタキャラクタの「*」では意味が異なるので注意してください。シェルは「*」を0文字以上の文字列と解釈します。
正規表現は明示的に「'」(シングルクォーテーション)や「"」(ダブルクォーテーション)の引用符で囲う事ができます。これらの引用符で囲まれた正規表現の記号は、シェルにメタキャラクタとして扱われなくなります。
正規表現を利用する主なコマンドは以下のとおりです。
・grep
ファイルや標準入力から、検索パターンにマッチする文字列を含む行を抽出するコマンド
なお、「-E」オプションを併用すると拡張正規表現が使えます(egrepコマンドと同様)。
・sed
ファイルや標準入力の内容を編集して表示するコマンド
例1)1から5までのいずれかの文字がある行を「test.txt」ファイルから抽出する場合
$ grep '[1-5]' test.txt
例2)「test.txt」ファイルの「#」から始まる行を削除して出力する場合
$ sed '/^#/d' test.txt
基本正規表現と拡張正規表現の違いに注意してください。grepコマンドは、-Eオプションを付けないと検索パターンを基本正規表現と判断しますので、上表の拡張正規表現が使えません。
実行例)
![【図を表示2】](https://ping-t-production-strg.s3.ap-northeast-1.amazonaws.com/uploads/question_image/file/11307/kk45041.jpg?X-Amz-Expires=600&X-Amz-Date=20240727T023617Z&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEAYaDmFwLW5vcnRoZWFzdC0xIkcwRQIgZGbfF1GoEDO%2FYrfCsXwfFSjCKj1RvjjY73XrK7%2BQmNoCIQDQepXbON3IQIjPhJHvDWmfx7QZLZ38Eufauz3VD8MrMyqxBAjf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDYyMzQyOTgyNzI3NSIMN422Dczg4LODIH7UKoUEAQgot%2FkaKm0ycrY0esL1EN%2Fd8yPeY1B0QFsipqtIABA1SdaGl3RwYaxW09JrRsZCI64Zk4KkOBPvzL%2FMkx8c8c8gmEvs0u4A40Cua4V5YIxMhs8PuNvZQW2ICoSi9GVcILgRjhGXvjQxZtHC2hGEG5f0016Y2ZGR8AhwBhRMD4vLmOTIngn2xqwRp6O9A%2FSuGoAf8pcTscE4NyRQ6hrfv2mhzSuq3BwTtE4LtZcJK%2B0cj2nQu5chUJtJ8B3jbX04Mil%2BVIJoutTSsGgy%2FPzC9EsaDmydOSESyOI8zsIeObqNo2%2BtCfgBsBlPy8sIFPIaWk7e2q9j9Jn18c2rndsn8Nt955J%2F%2F91JpdvbuTXWa3dSTnvM18t9OHyR6NBJrkbZOggFlXR4BqCZbwf2oUllVG9uulGiaItDV7QmMr2mvJ16seiRZ1jbzPIDLvAqFrOZsoh9ibS3i%2Fcco6Xv%2Fwj%2F5Q2%2FnJmQeoj2f5njnGgr%2Bkh91qXkq2FCdvp9kM2fRXKw7LXzNA5zjZdw7jEjmYYEKO3kfRt%2BmqAUAGHbjWD6ZORaeOZ6SyeE%2BciAA%2F8uRtuTVaP6rYsYw9IXoT3lGJ1QiwWHNbGlyNop%2F76tqMn90JcgNqKDnM%2FsAlWGFVi%2FEg28vzgaqnTthI%2Fz9PwO9v4KQLIQFo4vbTBEKC1K2tWHh%2FZT80vnXjDyvZC1BjqmAQac2E5lk6HQlBuIP81mejR4mAHvW19rMqK8fPWiS5T8snoCbT35rOShhx1mBdzRzs%2FPfy6Pa1X%2B67U%2BYNoGExGt4QVAmzs4QUnkOre3y20krCO%2BzqIr%2BdZZltTxih7YSet0NWSGAdu4pqWJvyjJfaMU6Aqiq0XQOa7bCEgdRby39OQNS6VWw3ah5PRFigfyolbI7tQ2FIOnXTRc1vTBrgvbZvF9yAY%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAZCJ2QHLFV3Q5B6V3%2F20240727%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature=8288a3818e79add8624495531c17af44f20304804ecaaa093a6ae839edf08283)
基本正規表現では「?, +」は「\?, \+」とすることで、拡張正規表現と同様の意味を持つようになります。
![【図を表示3】](https://ping-t-production-strg.s3.ap-northeast-1.amazonaws.com/uploads/question_image/file/11308/kkk45041.jpg?X-Amz-Expires=600&X-Amz-Date=20240727T023617Z&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEAYaDmFwLW5vcnRoZWFzdC0xIkcwRQIgZGbfF1GoEDO%2FYrfCsXwfFSjCKj1RvjjY73XrK7%2BQmNoCIQDQepXbON3IQIjPhJHvDWmfx7QZLZ38Eufauz3VD8MrMyqxBAjf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAAaDDYyMzQyOTgyNzI3NSIMN422Dczg4LODIH7UKoUEAQgot%2FkaKm0ycrY0esL1EN%2Fd8yPeY1B0QFsipqtIABA1SdaGl3RwYaxW09JrRsZCI64Zk4KkOBPvzL%2FMkx8c8c8gmEvs0u4A40Cua4V5YIxMhs8PuNvZQW2ICoSi9GVcILgRjhGXvjQxZtHC2hGEG5f0016Y2ZGR8AhwBhRMD4vLmOTIngn2xqwRp6O9A%2FSuGoAf8pcTscE4NyRQ6hrfv2mhzSuq3BwTtE4LtZcJK%2B0cj2nQu5chUJtJ8B3jbX04Mil%2BVIJoutTSsGgy%2FPzC9EsaDmydOSESyOI8zsIeObqNo2%2BtCfgBsBlPy8sIFPIaWk7e2q9j9Jn18c2rndsn8Nt955J%2F%2F91JpdvbuTXWa3dSTnvM18t9OHyR6NBJrkbZOggFlXR4BqCZbwf2oUllVG9uulGiaItDV7QmMr2mvJ16seiRZ1jbzPIDLvAqFrOZsoh9ibS3i%2Fcco6Xv%2Fwj%2F5Q2%2FnJmQeoj2f5njnGgr%2Bkh91qXkq2FCdvp9kM2fRXKw7LXzNA5zjZdw7jEjmYYEKO3kfRt%2BmqAUAGHbjWD6ZORaeOZ6SyeE%2BciAA%2F8uRtuTVaP6rYsYw9IXoT3lGJ1QiwWHNbGlyNop%2F76tqMn90JcgNqKDnM%2FsAlWGFVi%2FEg28vzgaqnTthI%2Fz9PwO9v4KQLIQFo4vbTBEKC1K2tWHh%2FZT80vnXjDyvZC1BjqmAQac2E5lk6HQlBuIP81mejR4mAHvW19rMqK8fPWiS5T8snoCbT35rOShhx1mBdzRzs%2FPfy6Pa1X%2B67U%2BYNoGExGt4QVAmzs4QUnkOre3y20krCO%2BzqIr%2BdZZltTxih7YSet0NWSGAdu4pqWJvyjJfaMU6Aqiq0XQOa7bCEgdRby39OQNS6VWw3ah5PRFigfyolbI7tQ2FIOnXTRc1vTBrgvbZvF9yAY%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAZCJ2QHLFV3Q5B6V3%2F20240727%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature=eb0b6ecc02b1876d5539c880e1414e59ba8d05d1cbecef695fbe3c80cd6cbf63)
置換コマンドオプションについて聞きたいです。
公開日 2024/01/04
解説で編集コマンドにs/文字列1/&を含む文字列という記載があるのですが、
使用例を教えて頂きたいです。お願いします。
2024/01/05 10:20
使用例というのはこういうことですか?
$ cat todofuken.txt | sed -e 's/Tokyo/& to/' | sed -e 's/(Kyoto|Osaka)/& Fu/'
Hokkaido
Akita
Aomori
Tokyo to
Aichi
Kyoto
Osaka
Okayama
Fukuoka
Kagoshima
他にもググったらちょこちょこ出てくる(とはいえ &
を無効化する話が多く見られますが)ので、そういうのも参考にされると良いかと思います。
https://zenn.dev/peg/articles/72bde0980dde20
コメント
この投稿に対して返信しませんか?