この正規表現が奇妙なファイルと一致するのはなぜですか?

この正規表現が奇妙なファイルと一致するのはなぜですか?

正規表現で遊んで学びましょう。 errsort、pytest.pyなど、他のファイルと一致するのはなぜですか?他の2つのファイルと一致するように、2行目の末尾に疑問符を追加します。また、grepの基本式を試してみました。

ありがとうございます!

$ ls -x | egrep -i "(aa)(dd)?(cc)?(dd)?((bb(ccdd)?(bb)?)?)|(ccdd)"
aa       aaaa       aabb     aabbaa     aabbbb    aabbccdd  aabbccddcc  
aabbddbb
aaccaa   aaccdd   aaddaa   aaddccddccdd  aaddee  errsort   pytest.py   TEST
$ ls -x | egrep -i "(aa)(dd)?(cc)?(dd)?((bb(ccdd)?(bb)?)?)|(ccdd)?"
aa       aaaa     aabb    aabbaa        aabbbb  aabbccdd  aabbccddcc  aabbddbb
aaccaa   aaccdd   aaddaa  aaddccddccdd  aaddee  errsort   pytest.py   TEST
test.sh  vimtest

$ bash --version
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
$ grep --version
grep (GNU grep) 3.7
$ ls | egrep -i "(aa)(dd)?(cc)?(dd)?((bb(ccdd)?(bb)?)?)|(ccdd)"
ああ
ああああ
アブ
アバ
アブ
aabbccdd
aabbccddCC
アブDDBB
アカア
ヤガード
アダ
追加ccddccdd
次へ追加この
$ ls -x | egrep -i "(aa)(dd)?(cc)?(dd)?((bb(ccdd)?(bb)?)?)|(ccdd)?"
ああ   ああああ     アブ    アバ    アブ  aabbccdd  aabbccddCC  アブDDBB
アカア   ヤガード   アダ  追加ccddccdd  次へ追加ee pytest.pyテストソートエラー
vimtest.sh テスト
$ ls | egrep -i "(aa)(dd)?(cc)?(dd)?((bb(ccdd)?(bb)?)?)|(ccdd)?"
ああ
ああああ
アブ
アバ
アブ
aabbccdd
aabbccddCC
アブDDBB
アカア
ヤガード
アダ
追加ccddccdd
次へ追加この
無効なソート
pytest.py
テスト
テストファイル
Wimテスト
$

$ ls | egrep -io "(aa)(dd)?(cc)?(dd)?((bb(ccdd)?(bb)?)?)|(ccdd)?"
ああ
ああ
ああ
アブ
アブ
ああ
アブ
aabbccdd
aabbccdd
アブ
アラブ首長国連邦
ああ
ヤガード
次へ追加
ああ
addccdd
ccdd
次へ追加

これは色を提供しませんが、私の画面の太字はパターンマッチングと思われるものを示すために赤です。
下のファイルには赤がありません。
-x を削除すると、最初の出力に影響します。 -o役に立った!

ベストアンサー1

オプションのマッチングは(ccdd)?まさにオプションです。

一致するテキストは次のとおりです。しかし、これはまだ一致し、一致する行です。

$ ls -x
aa   aaaa       aabb  aabbaa   aabbbb   aabbccdd  aabbccddcc  aabbddbb  aaccaa  aaccdd  aaddaa  aaddccddccdd  aaddee
errsort  pytest.py  TEST  test.sh  vimtest

$ ls -x | cat
aa   aaaa     aabb    aabbaa    aabbbb  aabbccdd  aabbccddcc  aabbddbb
aaccaa   aaccdd   aaddaa  aaddccddccdd  aaddee  errsort   pytest.py   TEST
test.sh  vimtest

ls出力がパイプされると変化することを理解することが重要です。今grepに一致する3行があります。

1行目と2行目は(複数)一致しているため、両方の行がaa印刷されます。

$ ls -x | egrep -i "(aa)(dd)?(cc)?(dd)?((bb(ccdd)?(bb)?)?)|(ccdd)"
aa   aaaa     aabb    aabbaa    aabbbb  aabbccdd  aabbccddcc  aabbddbb
aaccaa   aaccdd   aaddaa  aaddccddccdd  aaddee  errsort   pytest.py   TEST

$ ls -x | egrep -i "(aa)(dd)?(cc)?(dd)?((bb(ccdd)?(bb)?)?)|(ccdd)?"
aa   aaaa     aabb    aabbaa    aabbbb  aabbccdd  aabbccddcc  aabbddbb
aaccaa   aaccdd   aaddaa  aaddccddccdd  aaddee  errsort   pytest.py   TEST
test.sh  vimtest

示されているように、(ccdd)?3行目は 。

あなたのファイルのリストが正しい形式ではないと仮定します。

おすすめ記事