目的は、大文字1個、小文字1個、特殊文字1個、数字1個を含まないファイルのすべての行を削除することです。
この正規表現を実行できません。
(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$
bashコマンドに示されているように:
sed -ri '\/(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$\/!d' rh.txt
エラーは次のとおりです。
sed: -e expression #1, char 67: unterminated address regex
何から逃げるべきかわかりません。
助けが必要ですか?
答え1
sed
この目的には使用しないでくださいgrep
。この方法で PCRE スタイル表現を使用できますsed
(PCRE を使用しません)。
grep -v -P '^(?=.*pattern1)(?=.*pattern2)'
答え2
スラッシュをエスケープし/
て/
アドレスパターンの区切り文字になっていないため、エラーが発生します。
これで、エスケープしなくても/
正規表現は機能しません。そして一部の実装でのみsed
サポートされています(次のPOSIXバージョンでは標準になる予定です)。または、正規表現で使用されているプレビュー機能はサポートされていません。BRE
ERE
BRE
ERE
(?=...)
リクエストを送信:
LC_ALL=C sed -e '
/[A-Z]/!d
/[a-z]/!d
/[0-9]/!d
/[#?!@$%^&*-]/!d
' <file
答え3
利用可能なソリューションの使用sed
:
sed -n '/[A-Z]/{/[a-z]/{/[0-9]/{/[#?!@$%^&*-]/p}}}'