以下を含む「test」というファイルがあります。
linux
Unixlinux
Linuxunix
it's linux
l...x
これで:を使用すると、grep '\<l.*x\>'
次のようになります。
linux
it's linux
l...x
ただし、を使用すると、grep '\<l*x\>'
次のように一致します。
l...x
ただし、リファレンスガイドによると、*を使用すると、前の項目が0回以上一致します。つまり、「l」で始まり「x」で終わるものと一致する必要があります。
期待した結果が表示されない理由を説明できる人はいますか?それとも私が間違って理解していますか?
ベストアンサー1
シンボル(.*)
正規表現の * と * は、文字当たりの文字数ではなく、数を意味し、より正確には意味します。「0個以上」。また、。方法「すべての単一文字」。
だからそれらを合わせると「0個以上の文字があります。」。たとえば、次の文字列は次のようになります。
- Linux
- リンNx
- lnx
- ハイLinux
- ラックス
と一致します<l.*x>
。最後の項目が重要であることを示します。.*やはり一致できません。
シンボル(*)
私が言ったように、*だけがカウンターです。したがって、文字の後に入れると、次のようになります。「エル」*言う「0個以上のl」。
grep は と一致しますが、考え方とl*x
異なるl...x
場合があります。
% echo "l...x" | grep "l*x"
l...x
末尾の「x」と一致します。 「l」は、「x」の前に「x」があることを除いて、一致理由とは何の関係もありません。「0個以上のl」。