15 ຄຳ ແນະ ນຳ ກ່ຽວກັບ sed Command ທີ່ມີປະໂຫຍດແລະເຄັດລັບ ສຳ ລັບວຽກງານບໍລິຫານລະບົບ Linux ປະ ຈຳ ວັນ


ຜູ້ບໍລິຫານລະບົບທຸກຄົນຕ້ອງຈັດການກັບເອກະສານຂໍ້ຄວາມ ທຳ ມະດາໃນແຕ່ລະວັນ. ການຮູ້ວິທີການເບິ່ງບາງພາກສ່ວນ, ວິທີການທົດແທນ ຄຳ ສັບ, ແລະວິທີການກັ່ນຕອງເນື້ອຫາຈາກເອກະສານເຫຼົ່ານັ້ນແມ່ນທັກສະທີ່ທ່ານຕ້ອງການໃຫ້ມີປະໂຫຍດໂດຍບໍ່ ຈຳ ເປັນຕ້ອງຄົ້ນຫາ Google.

ໃນບົດຂຽນນີ້ພວກເຮົາຈະທົບທວນ sed, ບັນນາທິການກະແສທີ່ມີຊື່ສຽງ, ແລະແບ່ງປັນ 15 ຄຳ ແນະ ນຳ ໃນການ ນຳ ໃຊ້ເພື່ອບັນລຸເປົ້າ ໝາຍ ທີ່ໄດ້ກ່າວມາກ່ອນ ໜ້າ ນີ້ແລະອື່ນໆ.

1. ການເບິ່ງແຖວຂອງເອກະສານ

ເຄື່ອງມືເຊັ່ນ: ຫົວແລະຫາງຊ່ວຍໃຫ້ພວກເຮົາເບິ່ງດ້ານລຸ່ມຫລືດ້ານເທິງຂອງເອກະສານ. ຈະເປັນແນວໃດຖ້າພວກເຮົາຕ້ອງການເບິ່ງພາກ ໜຶ່ງ ຢູ່ເຄິ່ງກາງ? ລົດເກຍຕໍ່ໄປນີ້ຈະກັບຄືນສາຍ 5 ເຖິງ 10 ຈາກ myfile.txt:

# sed -n '5,10p' myfile.txt

2. ການເບິ່ງເອກະສານທັງ ໝົດ ຍົກເວັ້ນຊ່ວງທີ່ ກຳ ນົດໃຫ້

ໃນທາງກັບກັນ, ມັນເປັນໄປໄດ້ທີ່ທ່ານຕ້ອງການພິມເອກະສານທັງ ໝົດ ຍົກເວັ້ນແຕ່ລະດັບທີ່ແນ່ນອນ. ເພື່ອຍົກເວັ້ນສາຍ 20 ເຖິງ 35 ຈາກ myfile.txt, ເຮັດ:

# sed '20,35d' myfile.txt

3. ການເບິ່ງສາຍແລະຊ່ວງທີ່ບໍ່ຕໍ່ເນື່ອງ

ມັນເປັນໄປໄດ້ວ່າທ່ານສົນໃຈໃນສາຍທີ່ບໍ່ຕິດຕໍ່ກັນ, ຫຼືຫຼາຍກວ່າ ໜຶ່ງ ເສັ້ນ. ໃຫ້ສະແດງເສັ້ນ 5-7 ແລະ 10-13 ຈາກ myfile.txt:

# sed -n -e '5,7p' -e '10,13p' myfile.txt

ດັ່ງທີ່ທ່ານເຫັນ, ຕົວເລືອກ -e ຊ່ວຍໃຫ້ພວກເຮົາປະຕິບັດການກະ ທຳ ທີ່ໄດ້ມອບ ໝາຍ (ໃນກໍລະນີນີ້, ສາຍການພິມ) ສຳ ລັບແຕ່ລະຊ່ວງ.

4. ການປ່ຽນແທນ ຄຳ ສັບຫລືຕົວອັກສອນ (ການທົດແທນພື້ນຖານ)

ເພື່ອທົດແທນທຸກໆຕົວຢ່າງຂອງ ຄຳ ວ່າ ດ້ວຍເລື່ອງ ເລື່ອງ ໃນ myfile.txt, ເຮັດ:

# sed 's/version/story/g' myfile.txt

ນອກຈາກນັ້ນ, ທ່ານອາດຈະຕ້ອງການພິຈາລະນາໃຊ້ gi ແທນ g ເພື່ອບໍ່ສົນໃຈກໍລະນີລັກສະນະ:

# sed 's/version/story/gi' myfile.txt

ເພື່ອທົດແທນພື້ນທີ່ຫວ່າງຫຼາຍບ່ອນແລະມີຊ່ອງດຽວ, ພວກເຮົາຈະ ນຳ ໃຊ້ຜົນຂອງການສະແດງເສັ້ນທາງ ip, ແລະການສົ່ງທໍ່:

# ip route show | sed 's/  */ /g'

ປຽບທຽບຜົນໄດ້ຮັບຂອງການສະແດງເສັ້ນທາງ ip ດ້ວຍແລະບໍ່ມີທໍ່ສົ່ງ:

5. ປ່ຽນ ຄຳ ເວົ້າຫຼືຕົວອັກສອນພາຍໃນຂອບເຂດ

ຖ້າທ່ານສົນໃຈໃນການປ່ຽນ ຄຳ ສັບພາຍໃນເສັ້ນ (30 ເຖິງ 40, ຕົວຢ່າງ), ທ່ານສາມາດເຮັດໄດ້:

# sed '30,40 s/version/story/g' myfile.txt

ແນ່ນອນ, ທ່ານສາມາດຊີ້ບອກເສັ້ນດຽວໂດຍຜ່ານເບີທີ່ກົງກັນຂອງມັນແທນທີ່ຈະເປັນຂອບເຂດ.

6. ການໃຊ້ ສຳ ນວນປົກກະຕິ (ການປ່ຽນແທນຂັ້ນສູງ) - ຂ້ອຍ

ບາງຄັ້ງເອກະສານການຕັ້ງຄ່າແມ່ນຖືກໂຫລດດ້ວຍ ຄຳ ເຫັນ. ໃນຂະນະທີ່ສິ່ງນີ້ມີປະໂຫຍດແນ່ນອນ, ມັນອາດຈະເປັນປະໂຫຍດທີ່ຈະສະແດງພຽງແຕ່ ຄຳ ແນະ ນຳ ກ່ຽວກັບການຕັ້ງຄ່າບາງຄັ້ງຖ້າທ່ານຕ້ອງການເບິ່ງພວກມັນທັງ ໝົດ.

ເພື່ອ ກຳ ຈັດເສັ້ນຫວ່າງຫລືສາຍທີ່ເລີ່ມຕົ້ນດ້ວຍ # ຈາກເອກະສານການຕັ້ງຄ່າ Apache, ເຮັດ:

# sed '/^#\|^$\| *#/d' httpd.conf

ປ້າຍລະຫັດຕິດຕາມດ້ວຍ ໝາຍ ເລກ ໝາຍ ເລກ (^#) ສະແດງຈຸດເລີ່ມຕົ້ນຂອງເສັ້ນ, ໃນຂະນະທີ່ ^$ ໝາຍ ເຖິງເສັ້ນຫວ່າງ. ແຖບແນວຕັ້ງສະແດງເຖິງການ ດຳ ເນີນງານຂອງເຫຼົ້າ, ໃນຂະນະທີ່ການຖອຍຫລັງຖືກ ນຳ ໃຊ້ເພື່ອຫລີກລ້ຽງແຖບແນວຕັ້ງ.

ໃນກໍລະນີພິເສດນີ້, ເອກະສານການຕັ້ງຄ່າຂອງ Apache ມີສາຍທີ່ມີລະຫັດ # ຂອງ ບໍ່ຢູ່ໃນຕອນຕົ້ນຂອງບາງສາຍ, ສະນັ້ນ * # ຖືກ ນຳ ໃຊ້ເພື່ອ ກຳ ຈັດບັນດານັ້ນເຊັ່ນກັນ.

7. ການໃຊ້ ສຳ ນວນປົກກະຕິ (ການທົດແທນທີ່ກ້າວ ໜ້າ) - II

ເພື່ອທົດແທນ ຄຳ ທີ່ເລີ່ມຕົ້ນດ້ວຍຕົວອັກສອນຫຍໍ້ຫລືຕົວນ້ອຍດ້ວຍ ຄຳ ອື່ນ, ພວກເຮົາຍັງສາມາດໃຊ້ sed. ເພື່ອເປັນຕົວຢ່າງ, ໃຫ້ແທນ ຄຳ ວ່າ Zip ຫຼື Zip ດ້ວຍ rar ໃນ myfile.txt:

# sed 's/[Zz]ip/rar/g' myfile.txt

8. ເບິ່ງສາຍທີ່ບັນຈຸດ້ວຍຮູບແບບທີ່ໃຫ້

ການໃຊ້ sed ອື່ນອີກປະກອບດ້ວຍການພິມເສັ້ນຈາກເອກະສານທີ່ກົງກັບການສະແດງອອກເປັນປະ ຈຳ. ຍົກຕົວຢ່າງ, ພວກເຮົາອາດສົນໃຈເບິ່ງກິດຈະ ກຳ ການອະນຸຍາດແລະກວດສອບຄວາມຖືກຕ້ອງທີ່ເກີດຂື້ນໃນວັນທີ 2 ເດືອນກໍລະກົດ, ຕາມໃບບັນທຶກ/var/log/ປອດໄພໃນເຊີບເວີ CentOS 7.

ໃນກໍລະນີນີ້, ຮູບແບບການຄົ້ນຫາແມ່ນ Jul 2 ໃນຕອນເລີ່ມຕົ້ນຂອງແຕ່ລະເສັ້ນ:

# sed -n '/^Jul  1/ p' /var/log/secure

9. ການແຊກຊ່ອງຫວ່າງເຂົ້າໃນແຟ້ມເອກະສານ

ດ້ວຍ sed, ພວກເຮົາຍັງສາມາດໃສ່ຊ່ອງຫວ່າງ (ສາຍເປົ່າ) ສຳ ລັບແຕ່ລະສາຍທີ່ບໍ່ຫວ່າງຢູ່ໃນເອກະສານ. ເພື່ອໃສ່ເສັ້ນໃດ ໜຶ່ງ ເສັ້ນທຸກເສັ້ນໃນ LICENSE, ເອກະສານຂໍ້ຄວາມ ທຳ ມະດາ, ເຮັດ:

# sed G myfile.txt

ເພື່ອປ້ອນສອງເສັ້ນຫວ່າງ, ເຮັດ:

# sed 'G;G' myfile.txt

ເພີ່ມຕົວຫຍໍ້ໃຫຍ່ G ທີ່ແຍກອອກດ້ວຍເຄື່ອງ ໝາຍ ຈຸດຖ້າທ່ານຕ້ອງການເພີ່ມສາຍເປົ່າ. ຮູບພາບຕໍ່ໄປນີ້ສະແດງຕົວຢ່າງທີ່ລະບຸໄວ້ໃນ ຄຳ ແນະ ນຳ ນີ້:

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

10. ເຮັດຕາມຕົວຢ່າງ dos2unix ກັບການແກ້ໄຂພາຍໃນ

ໂປຣແກຣມ dos2unix ຈະປ່ຽນເອກະສານຂໍ້ຄວາມ ທຳ ມະດາຈາກຮູບແບບ Windows/Mac ມາເປັນ Unix/Linux, ກຳ ຈັດຕົວອັກສອນ ໃໝ່ ທີ່ເຊື່ອງໄວ້ໂດຍບັນນາທິການຕົວ ໜັງ ສືບາງຕົວທີ່ໃຊ້ໃນເວທີເຫລົ່ານັ້ນ. ຖ້າມັນບໍ່ໄດ້ຖືກຕິດຕັ້ງຢູ່ໃນລະບົບ Linux ຂອງທ່ານ, ທ່ານສາມາດຮຽນແບບຂອງມັນກັບ sed ແທນທີ່ຈະຕິດຕັ້ງມັນ.

ໃນຮູບທາງເບື້ອງຊ້າຍພວກເຮົາສາມາດເຫັນຕົວອັກສອນ ໃໝ່ ຂອງ DOS ຫຼາຍຕົວ (^M) , ເຊິ່ງຕໍ່ມາຖືກລຶບອອກດ້ວຍ:

# sed -i 's/\r//' myfile.txt

ກະລຸນາຮັບຊາບວ່າຕົວເລືອກ -i ສະແດງໃຫ້ເຫັນການດັດແກ້ໃນສະຖານທີ່. ຫຼັງຈາກນັ້ນການປ່ຽນແປງຈະບໍ່ຖືກສົ່ງກັບ ໜ້າ ຈໍ, ແຕ່ຈະຖືກບັນທຶກລົງໃນເອກະສານ.

ໝາຍ ເຫດ: ທ່ານສາມາດໃສ່ຕົວອັກສອນ ໃໝ່ ຂອງ DOS ໃນຂະນະທີ່ ກຳ ລັງແກ້ໄຂເອກະສານໃນບັນນາທິການ vim ດ້ວຍ Ctrl + V ແລະ Ctrl + M .

11. ການແກ້ໄຂສະຖານທີ່ແລະການ ສຳ ຮອງເອກະສານຕົ້ນສະບັບ

ໃນ ຄຳ ແນະ ນຳ ກ່ອນ ໜ້າ ນີ້ພວກເຮົາໄດ້ໃຊ້ sed ເພື່ອດັດແປງເອກະສານແຕ່ບໍ່ໄດ້ບັນທຶກເອກະສານເດີມ. ບາງຄັ້ງມັນເປັນຄວາມຄິດທີ່ດີທີ່ຈະບັນທຶກ ສຳ ເນົາເອກະສານເດີມໄວ້ໃນກໍລະນີ.

ເພື່ອເຮັດສິ່ງນັ້ນ, ໃຫ້ບອກ ຄຳ ສັບທີ່ປະຕິບັດຕາມຕົວເລືອກ -i (ຢູ່ໃນວົງຢືມດຽວ) ເພື່ອ ນຳ ໃຊ້ເພື່ອປ່ຽນຊື່ເອກະສານເດີມ.

ໃນຕົວຢ່າງຕໍ່ໄປນີ້ພວກເຮົາຈະທົດແທນທຸກໆກໍລະນີຂອງສິ່ງນີ້ຫຼືນີ້ (ບໍ່ສົນໃຈກໍລະນີ) ດ້ວຍສິ່ງນັ້ນໃນ myfile.txt, ແລະພວກເຮົາຈະປະຫຍັດເອກະສານຕົ້ນສະບັບເປັນ myfile.txt.orig.

ສຸດທ້າຍ, ພວກເຮົາຈະ ນຳ ໃຊ້ປະໂຫຍດຕ່າງກັນເພື່ອ ກຳ ນົດຄວາມແຕກຕ່າງລະຫວ່າງເອກະສານທັງສອງ:

# sed -i'.orig' 's/this/that/gi' myfile.txt

12. ສັບປ່ຽນ ຄຳ ສັບຄູ່

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

ພວກເຮົາສາມາດເຮັດໄດ້ດ້ວຍ sed ງ່າຍດາຍ:

# sed 's/^\(.*\),\(.*\)$/\, /g' names.txt

ໃນຮູບຂ້າງເທິງນີ້ພວກເຮົາສາມາດເຫັນໄດ້ວ່າວົງເລັບ, ເປັນຕົວລະຄອນພິເສດ, ຈຳ ເປັນຕ້ອງໄດ້ເອົາຕົວຫຼົບ ໜີ, ຄືກັບຕົວເລກ 1 ແລະ 2.

ຕົວເລກເຫລົ່ານີ້ ໝາຍ ເຖິງການສະແດງອອກເປັນປະ ຈຳ ທີ່ສະແດງອອກ (ເຊິ່ງ ຈຳ ເປັນຕ້ອງປາກົດຢູ່ໃນວົງເລັບ):

<

  • 1 ໝາຍ ເຖິງຈຸດເລີ່ມຕົ້ນຂອງແຕ່ລະແຖວຈົນເຖິງຈຸດ.
  • 2 ແມ່ນບ່ອນເກັບມ້ຽນ ສຳ ລັບທຸກສິ່ງທຸກຢ່າງທີ່ຖືກຕ້ອງກັບຈຸດຈີ່ຈົນເຖິງຈຸດສຸດທ້າຍ.
  • ຜົນໄດ້ຮັບທີ່ຕ້ອງການແມ່ນສະແດງໃນຮູບແບບ SecondColumn (ນາມສະກຸນ) + comma + space + FirstColumn (ຊື່ ທຳ ອິດ). ຮູ້ສຶກບໍ່ເສຍຄ່າທີ່ຈະປ່ຽນມັນໄປໃນສິ່ງທີ່ທ່ານຕ້ອງການ.

    13. ປ່ຽນແທນ ຄຳ ສັບເທົ່ານັ້ນຖ້າພົບວ່າການຈັບຄູ່ແຍກກັນ

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

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

    We need to start partying at work,
    but let’s remember to start all services first.
    

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

    # sed '/services/ s/start/stop/g' msg.txt
    

    14. ປະຕິບັດການທົດແທນສອງຕົວຫຼືຫຼາຍຄັ້ງໃນເວລາດຽວກັນ

    ທ່ານສາມາດສົມທົບການທົດແທນສອງຫຼືຫຼາຍກວ່າ ໜຶ່ງ ຄຳ ສັ່ງ sed ດຽວ. ປ່ຽນແທນ ຄຳ ສັບທີ່ແລະໃສ່ໃນ myfile.txt ດ້ວຍ This ແລະຂໍ້, ຕາມ ລຳ ດັບ.

    ໃຫ້ສັງເກດວິທີການນີ້ສາມາດເຮັດໄດ້ໂດຍການໃຊ້ ຄຳ ສັ່ງທົດແທນ sed ປະຊຸມສະໄຫມຕິດຕາມດ້ວຍ ຄຳ ສັ່ງ semicolon ແລະ ຄຳ ສັ່ງທົດແທນທີສອງ:

    # sed -i 's/that/this/gi;s/line/verse/gi' myfile.txt
    

    ຄຳ ແນະ ນຳ ນີ້ແມ່ນສະແດງຢູ່ໃນຮູບຕໍ່ໄປນີ້:

    15. ປະສົມ sed ແລະ ຄຳ ສັ່ງອື່ນໆ

    ແນ່ນອນ, sed ສາມາດຖືກລວມເຂົ້າກັບເຄື່ອງມືອື່ນໆເພື່ອສ້າງ ຄຳ ສັ່ງທີ່ມີປະສິດທິພາບຫຼາຍຂຶ້ນ. ຍົກຕົວຢ່າງ, ໃຫ້ໃຊ້ຕົວຢ່າງທີ່ລະບຸໄວ້ໃນ TIP # 4 ແລະສະກັດທີ່ຢູ່ IP ຂອງພວກເຮົາຈາກຜົນຜະລິດຂອງ ຄຳ ສັ່ງ <ລະຫັດ ip ເສັ້ນທາງ ip .

    ພວກເຮົາຈະເລີ່ມຕົ້ນໂດຍການພິມພຽງແຕ່ສາຍທີ່ມີ ຄຳ ວ່າ src ເທົ່ານັ້ນ. ຈາກນັ້ນພວກເຮົາຈະປ່ຽນພື້ນທີ່ຫລາຍໆບ່ອນໃຫ້ເປັນ ໜຶ່ງ ດຽວ. ສຸດທ້າຍ, ພວກເຮົາຈະຕັດພາກສະ ໜາມ ທີ 9 (ພິຈາລະນາສະຖານທີ່ດຽວເປັນຜູ້ແຍກພາກສະ ໜາມ), ເຊິ່ງແມ່ນບ່ອນທີ່ IP address:

    # ip route show | sed -n '/src/p' | sed -e 's/  */ /g' | cut -d' ' -f9
    

    ຮູບພາບຂ້າງລຸ່ມນີ້ສະແດງໃຫ້ເຫັນແຕ່ລະບາດກ້າວຂອງ ຄຳ ສັ່ງຂ້າງເທິງ:

    ບົດສະຫຼຸບ

    ໃນຄູ່ມືນີ້ພວກເຮົາໄດ້ແບ່ງປັນ 15 ເຄັດລັບແລະເຄັດລັບເພື່ອຊ່ວຍທ່ານໃນວຽກງານບໍລິຫານລະບົບປະ ຈຳ ວັນຂອງທ່ານ. ມີ ຄຳ ແນະ ນຳ ອື່ນໃດທີ່ທ່ານໃຊ້ເປັນປະ ຈຳ ແລະຢາກແບ່ງປັນກັບພວກເຮົາແລະຊຸມຊົນທີ່ເຫຼືອ?

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