私はfile
を持っています
denm.xyz
denm.abc
denm.def
denm_xyz
denm_abc
denm_def
.
が含まれているものを抽出します。
私は試した
grep "denm\.*" file
grep 'denm\.*' file
sed "/denm\.*/p" file
sed '/denm\.*/p' file
これらはfile
のすべてに一致しています
ただし、awk
を使用する
awk '/denm\./' file
働いた!!
grep
またはsed
を使用して同じことを行う方法
近かったので、*
を削除する必要があります。これは、前のトークン(この場合は.
)のゼロ以上の一致を意味します。その結果、demn_
もゼロ.
の条件に一致したため、結果に表示されます。
だからあなたができる:
grep 'denm\.' file.txt
同様にsed
で:
sed -n '/denm\./p' file.txt
sed
の-n
オプションを見逃していることに注意してください。これがない場合、sed
はすべての行も出力します。
また、非常に多くのレベルの精度を追加して、複雑な場合に必要なものを正確に取得することもできますが、それを開始点としてください。
例:
% grep 'denm\.' file.txt
denm.xyz
denm.abc
denm.def
% sed -n '/denm\./p' file.txt
denm.xyz
denm.abc
denm.def
\.*
は、ゼロを含む「文字.
の任意の数の出現」を意味します。下線付きのファイル名は、denm
で始まり、その後に.
がゼロ出現するため、一致します。 grep "denm\." file
は機能します。
必要なのが.
を含む行だけである場合、正規表現の代わりに固定文字列でgrepを使用しました。
grep -F . file
man grep
から:
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by
newlines, any of which is to be matched. (-F is specified by
POSIX.)
固定文字列では、すべての正規表現の特殊文字は意味を失います。
sed
には対応するオプションがありません。
私はエスケープするためにバックスラッシュの代わりにブラケットを使用する傾向があります:
egrep "denm[.].*" file
sed -r 's/denm[.]/.../'
これにより、バックスラッシュを回避するかどうか、どのように回避するかを考える手間が省けます。 (最後の.*
はここでは冗長です。)