「OMG! 知らなかった!」: 30年以上前に私がシェアしたどんなものよりも感謝されたSimply Linuxのヒント

「OMG! 知らなかった!」: 30年以上前に私がシェアしたどんなものよりも感謝されたSimply Linuxのヒント

正規表現今日は、人生を変えた Linux のヒントをお伝えします。

まあ、ちょっと言い過ぎかもしれませんが、誰かに見せると必ず「本当ですか!? うわー、それってずっと簡単じゃないですか」と言われます。技術的には、ドキュメントを読んでいる人なら誰でも見つけられるはずです。秘密でもなければ、ドキュメント化されていないわけでもないからです。しかし、Unix/Linux界隈では根強い伝統があり、人は苦労して物事を学んで育っていくのです。今週も、Linuxが存在する前からUnix/Linuxのシステム管理者をしていた人と話をしましたが、彼はこのトリックを知りませんでした。

これはLinux、BSD、そして古いプロプライエタリUnixにも当てはまります。私は数十年前にSunOSでこれを体験したので、Unixの起源に遡ります。また、vi/vim、perl、そして正規表現が使用されるほぼすべての環境にも当てはまります。

問題:バックスラッシュ症候群

ファイル名に関する例を挙げますが、繰り返しますが、このトリックは正規表現に普遍的に適用できます。

シェル スクリプトに次のようなパスがあるとします。

長いパス

次のように変更します:

 /some/path/new/path

どうやってやるんですか?もちろん正規表現です。sedを使おう。きっとこんなのを見たことがあるでしょう。

 sed 's/\/that\/is\/long/\/new\/path/'

これでもうまくいきますが、読みにくいですよね?実際の区切り文字を赤で示してみましょう。

 sed の/ \/that\/is\/long / \/new\/path / '

残念ながら、区切り文字として / を使用しているため、それを使用する場所では必ずバックスラッシュでエスケープする必要があり、その結果、バックスラッシュ症候群が発生します。

ザ・キュアー

正規表現では任意の文字を区切り文字として使用できることをご存知ですか?次の例を試してみてください。

 sed 's#/that/is/long#/new/path#'

わあ!確かに読みやすくなりましたね。上の赤いスラッシュをオクトソープに置き換えることで、スラッシュをエスケープする必要がなくなりました。

もちろん、文字列がオクトソープだらけの場合は、別のものを使用してください。スペースを使うこともできます。

 sed の /that/is/long /new/path '

区切り文字が 3 つの場所すべてで同じであれば、どの記号でも機能します。

これはどんな正規表現でもできます。バックスラッシュを正しい位置に配置したり、数えたりするのに苦労している人を(そして私自身も)見てきました。複雑な正規表現は見た目が解析しにくいので、苦労する人もいます。このトリックを使えば、すべてがずっと簡単になります。

楽しむ!

おすすめの記事