edでXは検索しますがYは検索しません

edでXは検索しますがYは検索しません

samエディタで次のコマンドを使用すると、文字列 "ed"を検索して印刷できますが、 "red"は検索できません。

,x./*\n/ g/ed v/red p

編集でも同様のことができる方法を見つけようとしています。文字列 "ed"を検索したいのですが、次の内容を含む行は取得したくありません。

アル字型編集する、良い編集する、荷物編集する、等。

v コマンドに精通していますが、ag コマンドで使用する方法や ed で使用できるかどうかはわかりません。

答え1

これは、単語の境界マークを含む正規表現を使用するのが最善です。

g/\<ed\>/p

私はそれについて完全に慣れていないsamので、あなたが示した編集式についてコメントすることはできません。上記の式はワイヤー含む言葉 ededつまり、前後に a がない文字列です。単語文字。単語文字はセットの文字です[[:alnum:]_]。幅がゼロの\<アサーションであり、\>単語文字と単語以外の文字の境界で一致します。

\<非標準ですが、GNU\>システムと一部のBSDシステムで使用できます。 macOSは[[:<:]]andを代わりに使用しますが、GNUシステムは単語の始めと終わりでandを使用して一致させる[[:>:]]こともできます。\b

移植可能な方法でこれを行うには一致する必要がありますが、単語が行の先頭または末尾に表示されるか、1行に2つの文字しかない[^[:alnum:]_]ed[^[:alnum:]_]特殊なケースも考慮する必要があります。ed

答え2

Kusalanandaの回答の拡張として、ExはPOSIXエディタでもあります。\< \>POSIXではワードアンカーをサポートする必要があります。。だから、単に使用することをお勧めします

g/\<ed\>/p

しかし、前に。

関連情報