次のような長いリストがあります。
AllowedUsers [email protected] [email protected] [email protected] [email protected] .....
すべて1行にあります。デフォルトでは、多くのユーザー名@ip
ユーザー名(例:aaa)を使用して検索と置換を実行し、何でも変更したいと思います。
正規表現をテストしました(正規表現)期待通りに動作します。ただし、この操作を実行しようとすると動作sed
しません。
$ sed 's/bbbb11.*?(?= )//' test
AllowedUsers [email protected] [email protected] [email protected] [email protected] .....
私も試してみましたが、うまくbbbb11.*?(?=[[:space:]])
いきませんでした。
私が逃したものは何ですか?
答え1
ポジティブ(?=
)とマイナスの予測(?!
)アサーションは、サポートされているツールでのみ正しく機能します。PCRE拡張。 GNUsed
も POSIX も、これらのライブラリ拡張をサポートしていません。perl
すぐにサポートが必要です。
perl -pe 's/bbbb11.*?(?= )//'
あるいは、正規表現のサポートなしで同じ目標を達成できます。この簡単な交換のために、POSIXとGNUの両方で動作する次のことができます。sed
sed 's/\(bbbb11[^ ]*\)//'