
正規表現で遊んで学びましょう。 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行目は 。
あなたのファイルのリストが正しい形式ではないと仮定します。
答え2
grep
いいえマッチ...のようなファイルはerrsort
その行と一致し、実際に一致する唯一のもの(aa)
(他のすべてはオプションです?
)です。ls -x
lsの出力を選択したので長い行そしてaa
競争。
一致しない代替グループが私が理解できないより多くのファイルを表示するのは、egrepのバグかもしれません。