ຄວາມແຕກຕ່າງຫຍັງລະຫວ່າງ Grep, Egrep ແລະ Fgrep ໃນ Linux?


ໜຶ່ງ ໃນເຄື່ອງມືຄົ້ນຫາທີ່ມີຊື່ສຽງໃນລະບົບຄ້າຍຄື Unix ເຊິ່ງສາມາດໃຊ້ເພື່ອຄົ້ນຫາສິ່ງໃດກໍ່ຕາມບໍ່ວ່າຈະເປັນເອກະສານ, ຫຼືສາຍຫລືຫຼາຍສາຍໃນເອກະສານແມ່ນຜົນປະໂຫຍດ grep. ມັນມີຄວາມກວ້າງຂວາງຫຼາຍໃນການເຮັດວຽກເຊິ່ງສາມາດສະແດງໄດ້ຈາກຫລາຍໆຕົວເລືອກທີ່ມັນສະ ໜັບ ສະ ໜູນ ເຊັ່ນ: ການຄົ້ນຫາໂດຍໃຊ້ຮູບແບບສາຍ, ຫຼືຮູບແບບທີ່ໃຊ້ຄືນຫຼືຮູບແບບທີ່ໃຊ້ perl-based.

ເນື່ອງຈາກການເຮັດວຽກທີ່ແຕກຕ່າງກັນ, ມັນມີຫລາຍຕົວເລືອກຫລາຍຢ່າງລວມທັງ grep, egrep (Extended GREP), fgrep (Fixed GREP), pgrep (Process GREP), rgrep (Recursive GREP) ແລະອື່ນໆແຕ່ຕົວປ່ຽນແປງເຫລົ່ານີ້ມີຄວາມແຕກຕ່າງເລັກນ້ອຍກັບ grep ເດີມເຊິ່ງໄດ້ເຮັດໃຫ້ພວກມັນ ເປັນທີ່ນິຍົມແລະຖືກ ນຳ ໃຊ້ໂດຍນັກຂຽນໂປແກຼມ Linux ຕ່າງໆ ສຳ ລັບວຽກງານສະເພາະ.

ສິ່ງທີ່ ສຳ ຄັນທີ່ຕ້ອງໄດ້ຮັບການສືບສວນແມ່ນສິ່ງທີ່ແຕກຕ່າງລະຫວ່າງສາມຕົວແປທີ່ ສຳ ຄັນ i. e.

ບາງຕົວອັກສອນ Meta-Special ຂອງ grep

<

  • + - ທຽບເທົ່າກັບການປະກົດຕົວຂອງຕົວອັກສອນກ່ອນ ໜ້າ ນີ້ ໜຶ່ງ ຫຼືຫຼາຍຄັ້ງ.
  • ? - ນີ້ ໝາຍ ເຖິງເກືອບ 1 ຄ້າງຫ້ອງຂອງຕົວລະຄອນກ່ອນ ໜ້າ ນີ້. ຄື: a? ຈະກົງກັບ ‘a’ ຫຼື ‘aa’.
  • ( - ເລີ່ມຕົ້ນຂອງການສະແດງອອກທາງເລືອກ.
  • )
  • ) - ສິ້ນສຸດຂອງການສະແດງອອກທາງເລືອກ.
  • | - ກົງກັບ ຄຳ ເວົ້າທີ່ແຍກອອກໂດຍ | . ເຊັ່ນ: “ (a | b) cde” ຈະກົງກັບທັງ“ abcde ’ຫຼື‘ bbcde ’.
  • { - ຕົວອັກສອນ meta ນີ້ສະແດງເຖິງຈຸດເລີ່ມຕົ້ນຂອງຕົວລະບຸ ຈຳ ນວນ. ຄ້າຍຄື: “ a {2}” ກົງກັບ“ aa” ໃນເອກະສານເຊັ່ນ: 2 ຄັ້ງ.
  • } - ຕົວອັກສອນ meta ນີ້ສະແດງຈຸດສິ້ນສຸດຂອງຕົວລະບຸຂອບເຂດ.
  • ຄວາມແຕກຕ່າງລະຫວ່າງ grep, egrep ແລະ fgrep

    ບາງຄວາມແຕກຕ່າງຕົ້ນຕໍລະຫວ່າງ grep, egrep ແລະ fgrep ສາມາດສະແດງໃຫ້ເຫັນດັ່ງຕໍ່ໄປນີ້. ສຳ ລັບຕົວຢ່າງທີ່ ກຳ ນົດໄວ້ນີ້ພວກເຮົາ ກຳ ລັງສົມມຸດວ່າເອກະສານກ່ຽວກັບການ ດຳ ເນີນງານໃດທີ່ຈະ ດຳ ເນີນການ:

    grep ຫຼືພິມເອກະສານ ສຳ ລັບການປົກກະຕິທົ່ວໂລກແມ່ນໂປແກຼມຄົ້ນຫາຫຼັກໃນລະບົບຄ້າຍຄື Unix ເຊິ່ງສາມາດຄົ້ນຫາສາຍໃດກໍ່ໄດ້ໃນບັນດາເອກະສານຫຼືລາຍຊື່ເອກະສານຫລືແມ້ແຕ່ຜົນຜະລິດຂອງ ຄຳ ສັ່ງໃດໆ.

    ມັນໃຊ້ການສະແດງອອກແບບ Basic Basic ນອກ ເໜືອ ຈາກສາຍປົກກະຕິເປັນຮູບແບບການຄົ້ນຫາ. ໃນການສະແດງອອກແບບປົກກະຕິຂັ້ນພື້ນຖານ (BRE), ມີຕົວອັກສອນຕົວຢ່າງເຊັ່ນ: {,} , (,) , | , + ,

    ນອກຈາກນີ້, grep ໃຊ້ສູດການຄິດໄລ່ Boyer-Moore ສຳ ລັບການຄົ້ນຫາສາຍດ່ວນຫຼືການສະແດງອອກເປັນປະ ຈຳ.

    $ grep -C 0 '(f|g)ile' check_file
    $ grep -C 0 '\(f\|g\)ile' check_file
    

    ເຊັ່ນດຽວກັນກັບບ່ອນນີ້, ເມື່ອ ຄຳ ສັ່ງ ດຳ ເນີນການໂດຍບໍ່ຕ້ອງຫຼົບ ໜີ () ແລະ | ຫຼັງຈາກນັ້ນມັນໄດ້ຄົ້ນຫາສາຍທີ່ສົມບູນເຊັ່ນ: “ (f | g) ile” ໃນແຟ້ມ. ແຕ່ເມື່ອຕົວອັກສອນພິເສດຖືກຫລົບ ໜີ, ຫຼັງຈາກນັ້ນແທນທີ່ຈະໃຫ້ພວກເຂົາເປັນສ່ວນຂອງສາຍ, grep ປະຕິບັດໃຫ້ພວກເຂົາເປັນຕົວອັກສອນຕົວອັກສອນແລະຄົ້ນຫາ ຄຳ “ ແຟ້ມ” ຫຼື “ gile” ໃນແຟ້ມ.

    Egrep ຫຼື grep -E ແມ່ນອີກລຸ້ນ ໜຶ່ງ ຂອງ grep ຫຼື Extended grep. ສະບັບຂອງ grep ນີ້ມີປະສິດທິພາບແລະວ່ອງໄວເມື່ອເວົ້າເຖິງຮູບແບບການສະແດງອອກແບບປົກກະຕິຍ້ອນວ່າມັນປະຕິບັດກັບຕົວອັກສອນ meta ຄືກັບແລະບໍ່ທົດແທນພວກມັນຄືກັບສາຍຄ້າຍຄືໃນ grep, ເພາະສະນັ້ນທ່ານຈຶ່ງຖືກປົດປ່ອຍຈາກພາລະຂອງການ ໜີ ຈາກພວກມັນ ໃນ grep. ມັນໃຊ້ ERE ຫຼື Extended Expression Expression ທີ່ ກຳ ນົດໄວ້.

    ໃນກໍລະນີຂອງ egrep, ເຖິງແມ່ນວ່າທ່ານຈະບໍ່ ໜີ ຈາກຕົວອັກສອນ meta, ມັນຈະຖືວ່າພວກມັນເປັນຕົວລະຄອນພິເສດແລະປ່ຽນແທນຄວາມ ໝາຍ ພິເສດຂອງພວກມັນແທນທີ່ຈະຖືວ່າເປັນສ່ວນ ໜຶ່ງ ຂອງສາຍ.

    $ egrep -C 0 '(f|g)ile' check_file
    $ egrep -C 0 '\(f\|g\)ile' check_file
    

    ເຊັ່ນດຽວກັນກັບທີ່ນີ້ egrep ໄດ້ຄົ້ນຫາ “ file” string ໃນເວລາທີ່ຕົວອັກສອນ meta ບໍ່ໄດ້ຖືກ ໜີ ອອກຍ້ອນວ່າມັນ ໝາຍ ເຖິງຄວາມ ໝາຍ ຂອງຕົວອັກສອນເຫຼົ່ານີ້. ແຕ່ວ່າ, ເມື່ອຕົວອັກສອນເຫລົ່ານີ້ຖືກ ໜີ ໄປ, ຫຼັງຈາກນັ້ນ egrep ປະຕິບັດຕໍ່ພວກມັນເປັນສ່ວນ ໜຶ່ງ ຂອງສາຍແລະຄົ້ນຫາລະຫັດທີ່ສົມບູນແບບ “ (f | g) ile” ໃນແຟ້ມ.

    Fgrep ຫຼື Fixed grep ຫຼື grep -F ແມ່ນອີກລຸ້ນ ໜຶ່ງ ຂອງ grep ທີ່ມີຄວາມໄວໃນການຄົ້ນຫາເມື່ອຕ້ອງການຄົ້ນຫາສາຍທັງ ໝົດ ແທນທີ່ຈະສະແດງອອກເປັນປະ ຈຳ ເພາະມັນບໍ່ໄດ້ຮັບຮູ້ການສະແດງອອກແບບປົກກະຕິ, ບໍ່ມີຕົວອັກສອນຕົວອັກສອນໃດໆ. ສຳ ລັບການຄົ້ນຫາສາຍໃດ ໜຶ່ງ ໂດຍກົງ, ນີ້ແມ່ນລຸ້ນຂອງ grep ທີ່ຄວນເລືອກ.

    ການຊອກຫາ Fgrep ສຳ ລັບສາຍທີ່ສົມບູນແລະບໍ່ໄດ້ຮູ້ເຖິງຕົວອັກສອນພິເສດທີ່ເປັນສ່ວນ ໜຶ່ງ ຂອງການສະແດງອອກແບບປົກກະຕິເຖິງແມ່ນວ່າຈະຖືກ ໜີ ຫຼືບໍ່ພົ້ນກໍ່ຕາມ.

    $ fgrep -C 0 '(f|g)ile' check_file
    $ fgrep -C 0 '\(f\|g\)ile' check_file
    

    ເຊັ່ນດຽວກັນກັບເມື່ອຕົວອັກສອນ meta ບໍ່ໄດ້ຖືກ ໜີ ໄປ, fgrep ໄດ້ຄົ້ນຫາລະຫັດທີ່ສົມບູນ “ (f | g) ile” ໃນແຟ້ມເອກະສານ, ແລະເມື່ອຕົວອັກສອນຕົວອັກສອນ meta ຖືກ ໜີ ໄປ, ຫຼັງຈາກນັ້ນ ຄຳ ສັ່ງ fgrep ໄດ້ຄົ້ນຫາ ລະຫັດ“\(f\| g \) ile” ທຸກຕົວອັກສອນທີ່ຢູ່ໃນແຟ້ມ.

    ພວກເຮົາໄດ້ກວມເອົາບາງຕົວຢ່າງທີ່ເປັນປະໂຫຍດຂອງ ຄຳ ສັ່ງ grep ທີ່ທ່ານສາມາດອ່ານຢູ່ບ່ອນນີ້, ຖ້າທ່ານຕ້ອງການທີ່ຈະໄດ້ຮັບ ຄຳ ສັ່ງ grep ຫຼາຍຂື້ນໃນ Linux.

    ສະຫຼຸບ

    ສິ່ງທີ່ກ່າວມາຂ້າງເທິງແມ່ນຄວາມແຕກຕ່າງລະຫວ່າງ ‘grep’, ‘egrep’ ແລະ ‘fgrep’. ນອກ ເໜືອ ຈາກຄວາມແຕກຕ່າງຂອງຊຸດ ສຳ ນວນປົກກະຕິທີ່ໃຊ້ແລ້ວ, ແລະຄວາມໄວຂອງການປະຕິບັດ, ຕົວ ກຳ ນົດສາຍ ຄຳ ສັ່ງທີ່ເຫລືອຍັງຄົງຄືເກົ່າ ສຳ ລັບທັງສາມລຸ້ນຂອງ grep ແລະແມ້ແຕ່ແທນ "egrep" ຫຼື "fgrep", "grep -E" ຫຼື "grep - F” ແມ່ນແນະ ນຳ ໃຫ້ໃຊ້.

    ຖ້າທ່ານພົບເຫັນຄວາມແຕກຕ່າງອື່ນໆລະຫວ່າງສາມລຸ້ນຂອງ grep, ກ່າວເຖິງພວກມັນໃນ ຄຳ ເຫັນຂອງທ່ານ.