ວິທີການໃຊ້ Awk ແລະການສະແດງອອກເປັນປະ ຈຳ ເພື່ອກັ່ນຕອງຕົວ ໜັງ ສືຫລືສະຕິງໃນແຟ້ມ


ເມື່ອພວກເຮົາ ດຳ ເນີນການ ຄຳ ສັ່ງບາງຢ່າງໃນ Unix/Linux ເພື່ອອ່ານຫລືແກ້ໄຂຂໍ້ຄວາມຈາກສາຍຫລືເອກະສານ, ພວກເຮົາມັກຈະພະຍາຍາມກັ່ນຕອງຜົນຜະລິດໃຫ້ພາກສ່ວນທີ່ສົນໃຈ. ນີ້ແມ່ນບ່ອນທີ່ການໃຊ້ ສຳ ນວນປົກກະຕິເຂົ້າມາໃຊ້ໄດ້ງ່າຍ.

ສຳ ນວນປົກກະຕິສາມາດຖືກ ກຳ ນົດເປັນສາຍເຊືອກທີ່ສະແດງເຖິງ ລຳ ດັບຂອງຕົວອັກສອນຫລາຍໆຢ່າງ. ໜຶ່ງ ໃນສິ່ງທີ່ ສຳ ຄັນທີ່ສຸດກ່ຽວກັບການສະແດງອອກເປັນປະ ຈຳ ແມ່ນວ່າພວກເຂົາອະນຸຍາດໃຫ້ທ່ານສາມາດກັ່ນຕອງຜົນຜະລິດຂອງ ຄຳ ສັ່ງຫລືເອກະສານ, ດັດແກ້ສ່ວນຂອງເອກະສານຂໍ້ຄວາມຫຼືການຕັ້ງຄ່າແລະອື່ນໆ.

ສຳ ນວນປົກກະຕິແມ່ນ:

<

  • ລັກສະນະ ທຳ ມະດາເຊັ່ນ: ພື້ນທີ່, ຂີດກ້ອງ (_), A-Z, a-z, 0-9.
  • ຕົວອັກສອນ Meta ທີ່ຂະຫຍາຍອອກເປັນຕົວອັກສອນ ທຳ ມະດາ, ພວກມັນປະກອບມີ: <
  • (.) ມັນກົງກັບຕົວອັກສອນໃດ ໜຶ່ງ ຍົກເວັ້ນເສັ້ນ ໃໝ່.
  • (*) ມັນກົງກັບສູນຫຼືມີຫຼາຍກວ່າຕົວອັກສອນທີ່ຢູ່ເບື້ອງຕົ້ນກ່ອນມັນ.
  • [ຕົວອັກສອນ] ມັນກົງກັບຕົວອັກສອນໃດ ໜຶ່ງ ທີ່ລະບຸໄວ້ໃນຕົວອັກສອນ, ໜຶ່ງ ຍັງສາມາດໃຊ້ ຄຳ ສັ່ງ (-) ເພື່ອ ໝາຍ ເຖິງຊ່ວງ ຂອງຕົວອັກສອນເຊັ່ນ [af] , [1-5] , ແລະອື່ນໆ.
  • ^ ມັນກົງກັບຈຸດເລີ່ມຕົ້ນຂອງແຖວໃນແຟ້ມເອກະສານ.
  • $ ກົງກັບຈຸດສຸດທ້າຍຂອງເອກະສານ.
  • \ ມັນແມ່ນຕົວລະຄອນ ໜີ.
  • ເພື່ອທີ່ຈະກັ່ນຕອງຂໍ້ຄວາມ, ທ່ານຕ້ອງໄດ້ໃຊ້ເຄື່ອງມືກັ່ນຕອງຂໍ້ຄວາມເຊັ່ນ: ງຸ່ມງ່າມ. ທ່ານສາມາດຄິດເຖິງ awk ເປັນພາສາການຂຽນໂປແກຼມຂອງມັນເອງ. ແຕ່ ສຳ ລັບຂອບເຂດຂອງ ຄຳ ແນະ ນຳ ນີ້ໃນການ ນຳ ໃຊ້ງຸ່ມງ່າມ, ພວກເຮົາຈະກວມເອົາມັນເປັນເຄື່ອງມືການກັ່ນຕອງເສັ້ນ ຄຳ ສັ່ງງ່າຍໆ.

    syntax ທົ່ວໄປຂອງ awk ແມ່ນ:

    # awk 'script' filename
    

    ບ່ອນທີ່ script ແມ່ນຊຸດຂອງ ຄຳ ສັ່ງທີ່ເຂົ້າໃຈໂດຍງຶດງໍ້ແລະຖືກ ດຳ ເນີນການໃນແຟ້ມເອກະສານ, ຊື່ແຟ້ມ.

    ມັນເຮັດວຽກໄດ້ໂດຍການອ່ານເສັ້ນທີ່ຢູ່ໃນແຟ້ມ, ເຮັດ ສຳ ເນົາເສັ້ນແລະຫຼັງຈາກນັ້ນກໍ່ປະຕິບັດສະຄິບຢູ່ໃນສາຍ. ນີ້ຖືກເຮັດຊ້ ຳ ໃນທຸກສາຍໃນເອກະສານ.

    ຕົວອັກສອນ ແມ່ນຢູ່ໃນຮູບແບບ /ຮູບແບບ/ການປະຕິບັດ ບ່ອນທີ່ຮູບແບບແມ່ນການສະແດງອອກເປັນປະ ຈຳ ແລະການກະ ທຳ ແມ່ນສິ່ງທີ່ງຸ່ມງ່າມຈະເຮັດໃນເວລາທີ່ມັນພົບຮູບແບບທີ່ຖືກມອບໃຫ້ເປັນເສັ້ນ.

    ວິທີການໃຊ້ເຄື່ອງມືການກັ່ນຕອງ Awk ໃນ Linux

    ໃນຕົວຢ່າງຕໍ່ໄປນີ້, ພວກເຮົາຈະສຸມໃສ່ຕົວອັກສອນ meta ທີ່ພວກເຮົາໄດ້ສົນທະນາຂ້າງເທິງພາຍໃຕ້ລັກສະນະຂອງງຸ່ມງ່າມ.

    ຕົວຢ່າງຂ້າງລຸ່ມນີ້ພິມທຸກເສັ້ນໃນແຟ້ມ/etc/hosts ເພາະບໍ່ມີຮູບແບບ.

    # awk '//{print}'/etc/hosts
    

    ຂ້າພະເຈົ້າຕົວຢ່າງຂ້າງລຸ່ມນີ້, ຮູບແບບ localhost ໄດ້ຖືກມອບໃຫ້, ດັ່ງນັ້ນ awk ຈະກົງກັບເສັ້ນທີ່ມີ localhost ຢູ່ໃນແຟ້ມ /etc/hosts .

    # awk '/localhost/{print}' /etc/hosts 
    

    ລະຫັດ (.) ຈະກົງກັບສາຍຕ່າງໆທີ່ມີ local, localhost, localnet ໃນຕົວຢ່າງຂ້າງລຸ່ມນີ້.

    ນັ້ນແມ່ນການເວົ້າ * ຂ້າພະເຈົ້າບາງຄົນມັກຊື້ c *.

    # awk '/l.c/{print}' /etc/hosts
    

    ມັນຈະກົງກັບສະຕິງທີ່ມີ localhost, localnet, ສາຍ, ຄວາມສາມາດ, ເຊັ່ນໃນຕົວຢ່າງຂ້າງລຸ່ມນີ້:

    # awk '/l*c/{print}' /etc/localhost
    

    ທ່ານຍັງຈະຮູ້ວ່າ (*) ພະຍາຍາມເຮັດໃຫ້ທ່ານມີການຈັບຄູ່ທີ່ຍາວທີ່ສຸດເທົ່າທີ່ເປັນໄປໄດ້.

    ໃຫ້ເບິ່ງໃນກໍລະນີທີ່ສະແດງໃຫ້ເຫັນນີ້, ໃຊ້ ສຳ ນວນປົກກະຕິ t * t ຊຶ່ງ ໝາຍ ຄວາມວ່າສາຍ ຄຳ ທີ່ກົງກັບທີ່ເລີ່ມຕົ້ນດ້ວຍຕົວອັກສອນ t ແລະສິ້ນສຸດດ້ວຍ t ໃນເສັ້ນຂ້າງລຸ່ມນີ້:

    this is tecmint, where you get the best good tutorials, how to's, guides, tecmint. 
    

    ທ່ານຈະໄດ້ຮັບຄວາມເປັນໄປໄດ້ດັ່ງຕໍ່ໄປນີ້ເມື່ອທ່ານໃຊ້ແບບ /t * t/:

    this is t
    this is tecmint
    this is tecmint, where you get t
    this is tecmint, where you get the best good t
    this is tecmint, where you get the best good tutorials, how t
    this is tecmint, where you get the best good tutorials, how tos, guides, t
    this is tecmint, where you get the best good tutorials, how tos, guides, tecmint
    

    ແລະ (*) ໃນ /t * t/ ຕົວອັກສອນ ທຳ ມະຊາດເຮັດໃຫ້ງຸ່ມງ່າມສາມາດເລືອກຕົວເລືອກສຸດທ້າຍ:

    this is tecmint, where you get the best good tutorials, how to's, guides, tecmint
    

    ຍົກຕົວຢ່າງທີ່ ກຳ ນົດຕົວຢ່າງ [al1] , ທີ່ນີ້ awk ຈະກົງກັບທຸກສາຍທີ່ມີຕົວລະຫັດ ຕົວ ຫຼື l ຫຼື 1 ໃນເສັ້ນໃນແຟ້ມ/etc/hosts.

    # awk '/[al1]/{print}' /etc/hosts
    

    ຕົວຢ່າງຕໍ່ໄປຈະກົງກັບສາຍຕ່າງໆທີ່ເລີ່ມຕົ້ນດ້ວຍ K ຫຼື k ຕາມດ້ວຍ T :

    # awk '/[Kk]T/{print}' /etc/hosts 
    

    ເຂົ້າໃຈຕົວລະຄອນດ້ວຍງຸ່ມງ່າມ:

    <

  • [0-9] ໝາຍ ເຖິງຕົວເລກດຽວ
  • [a-z] ໝາຍ ຄວາມວ່າກົງກັບໂຕອັກສອນນ້ອຍໂຕດຽວ
  • [A-Z] ໝາຍ ຄວາມວ່າກົງກັບໂຕອັກສອນໃຫຍ່ໂຕດຽວ
  • [a-zA-Z] ໝາຍ ຄວາມວ່າກົງກັບຕົວອັກສອນດຽວ
  • [a-zA-Z 0-9] ໝາຍ ຄວາມວ່າກົງກັບຕົວອັກສອນຫຼືຕົວເລກດຽວ
  • ໃຫ້ເບິ່ງຕົວຢ່າງຂ້າງລຸ່ມນີ້:

    # awk '/[0-9]/{print}' /etc/hosts 
    

    ທຸກເສັ້ນທີ່ມາຈາກແຟ້ມ/etc/hosts ມີຢ່າງ ໜ້ອຍ ມີໂຕເລກດຽວ [0-9] ໃນຕົວຢ່າງຂ້າງເທິງ.

    ມັນກົງກັບທຸກສາຍທີ່ເລີ່ມຕົ້ນດ້ວຍຮູບແບບທີ່ສະ ໜອງ ໄວ້ໃນຕົວຢ່າງຂ້າງລຸ່ມນີ້:

    # awk '/^fe/{print}' /etc/hosts
    # awk '/^ff/{print}' /etc/hosts
    

    ມັນກົງກັບທຸກເສັ້ນທີ່ສິ້ນສຸດດ້ວຍຮູບແບບທີ່ສະ ໜອງ ໃຫ້:

    # awk '/ab$/{print}' /etc/hosts
    # awk '/ost$/{print}' /etc/hosts
    # awk '/rs$/{print}' /etc/hosts
    

    ມັນຊ່ວຍໃຫ້ທ່ານສາມາດເອົາຕົວລະຄອນຕິດຕາມມັນເປັນຕົວ ໜັງ ສືທີ່ຕ້ອງເວົ້າໃຫ້ພິຈາລະນາຄືກັນກັບມັນ.

    ໃນຕົວຢ່າງຂ້າງລຸ່ມນີ້, ຄຳ ສັ່ງ ທຳ ອິດພິມທຸກເສັ້ນໃນເອກະສານ, ຄຳ ສັ່ງທີສອງບໍ່ມີຫຍັງພິມເພາະຂ້ອຍຕ້ອງການກົງກັບເສັ້ນທີ່ມີ $25.00, ແຕ່ບໍ່ມີຕົວອັກສອນຫລົບ ໜີ ຖືກໃຊ້.

    ຄຳ ສັ່ງທີສາມແມ່ນຖືກຕ້ອງເນື່ອງຈາກມີລັກສະນະຫລົບ ໜີ ໄດ້ຖືກ ນຳ ໃຊ້ເພື່ອອ່ານ $ຕາມທີ່ຂຽນ.

    # awk '//{print}' deals.txt
    # awk '/$25.00/{print}' deals.txt
    # awk '/\$25.00/{print}' deals.txt
    

    ບົດສະຫຼຸບ

    ນັ້ນບໍ່ແມ່ນທັງ ໝົດ ທີ່ມີເຄື່ອງມືກັ່ນຕອງເສັ້ນ ຄຳ ສັ່ງ awk, ຕົວຢ່າງຂ້າງເທິງນີ້ແມ່ນການ ດຳ ເນີນງານພື້ນຖານຂອງ awk. ໃນພາກຕໍ່ໄປພວກເຮົາຈະຕ້ອງກ້າວ ໜ້າ ກ່ຽວກັບວິທີການ ນຳ ໃຊ້ຄຸນລັກສະນະທີ່ສັບສົນຂອງງຸ່ມງ່າມ. ຂໍຂອບໃຈ ສຳ ລັບການອ່ານຜ່ານແລະ ສຳ ລັບການເພີ່ມເຕີມຫຼືຄວາມກະຈ່າງແຈ້ງ, ໃຫ້ ຄຳ ເຫັນໃນພາກ ຄຳ ເຫັນ.