grep (GNU grep) 2.5.1
を使って確認しました。
今日、上司に訊かれたのですが/etc/pam.d/su
の
#auth required pam_wheel.so use_uid
の行のコメントをどうやってsed
の正規表現を使って外すかということでした。
私はPerlやRubyの正規表現と同じ感覚で以下のように答えました。
# sed -i 's/^#(auth[ t]+required)/$1/g' /etc/pam.d/su
はい、全く置換してくれませんでした(ちなみに-i
オプションは上書きモードの意味です)。
何度も何度もちょこちょこ修正してやっては見たのですがどうしてもマッチしてくれない・・・。
なんとなくマッチしたところで妥協するしかありませんでした。
マッチした正規表現
もう少し試してみたらやっとマッチする正規表現が見つかりました。
POSIX互換タイプの正規表現
# cat /etc/pam.d/su | grep 'auth[[:blank:]]+required'
拡張正規表現モードの正規表現
-E
は拡張正規表現モードで起動することを意味します。
# cat /etc/pam.d/su | grep -E 'auth[[:blank:]]+required'
おわかりいただけるでしょうか?
"+"
と "+"
の違いと、集合セットをさらにブラケット []
で囲まなければいけなかったのです。
正解
とういうことで、sed
はPOSIX互換の正規表現を受け付けるため
# sed -i 's/^#(auth[[:blank:]]+required)/1/g' /etc/pam.d/su
でした。POSIX互換の正規表現では後方参照系はバックスラッシュでエスケープしなければいけないのと、 "$1"
ではなく "1"
としなければいけないところもポイントでした。
正規表現は本当に方言が多いですね・・・。
参考
-
これでもかってぐらい詳しくまとまっています。
正規表現メモ -
基本はこちらで。
正規表現 – Wikipedia
投稿者紹介
-
私たちは、テクノロジに魅せられた個性あふれるメンバーによって構成された茨城県日立市に本社を構えるベンチャー企業です。
”テクノロジを通して「驚き」と「感動」を創造し、人々の「夢」と「笑顔」を支えます。” の経営理念をモットーに明るい未来を描き、ワクワクする企画提案を続けて参ります。
最近のエントリ
- レポート2019.10.28ユニキャストレストランを開催しました🍳
- レポート2019.08.29社内研修ワークショップ~マシュマロ・チャレンジ~
- レポート2019.08.06Computex/InnoVEX 出展者・通訳として参加してきました。
- レポート2018.06.12Computex 2018 レポート