15 နေ့စဉ် Linux System Administration Tasks အတွက် အသုံးဝင်သော sed Command အကြံဥာဏ်များနှင့် လှည့်ကွက်များ


စနစ်စီမံခန့်ခွဲသူတိုင်းသည် နေ့စဉ်နေ့တိုင်း ရိုးရိုးစာသားဖိုင်များနှင့် ကိုင်တွယ်ဖြေရှင်းရမည်ဖြစ်သည်။ အချို့သောအပိုင်းများကို ကြည့်ရှုနည်း၊ စကားလုံးများကို အစားထိုးနည်းနှင့် ထိုဖိုင်များမှ အကြောင်းအရာများကို စစ်ထုတ်နည်းတို့ကို သိရှိခြင်းသည် Google ရှာဖွေမှုပြုလုပ်ရန်မလိုဘဲ သင့်တွင် အသုံးဝင်သော အရည်အချင်းများဖြစ်သည်။

ဤဆောင်းပါးတွင် ကျွန်ုပ်တို့သည် အစောပိုင်းဖော်ပြခဲ့သည့်ပန်းတိုင်များကို ပြီးမြောက်အောင်မြင်စေရန်အတွက် အသုံးပြုရန် အကြံပြုချက် 15 ခုကို လူသိများသော stream တည်းဖြတ်သူ sed ကို ပြန်လည်သုံးသပ်ပြီး မျှဝေပါမည်။

1. စာရွက်စာတမ်းတစ်ခု၏ အကွာအဝေးမျဉ်းများကို ကြည့်ရှုခြင်း။

ဦးခေါင်းနှင့် အမြီးကဲ့သို့သော ကိရိယာများက ကျွန်ုပ်တို့အား ဖိုင်တစ်ခု၏ အောက်ခြေ သို့မဟုတ် ထိပ်ကို ကြည့်နိုင်စေပါသည်။ အလယ်မှာ အပိုင်းတစ်ခုကို ကြည့်ဖို့လိုရင် ဘယ်လိုလုပ်မလဲ။ အောက်ဖော်ပြပါ sed one-liner သည် myfile.txt မှ လိုင်း 5 မှ 10 သို့ ပြန်ပေးပါမည်။

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

2. ပေးထားသည့် အပိုင်းအခြားမှလွဲ၍ ဖိုင်တစ်ခုလုံးကို ကြည့်ရှုခြင်း။

အခြားတစ်ဖက်တွင်၊ သင်သည် အချို့သောအပိုင်းအခြားမှလွဲ၍ ဖိုင်တစ်ခုလုံးကို print ထုတ်လိုခြင်း ဖြစ်နိုင်သည်။ myfile.txt မှ စာကြောင်း 20 မှ 35 ကို ဖယ်ထုတ်ရန်၊

# sed '20,35d' myfile.txt

3. ဆက်တိုက်မဟုတ်သော လိုင်းများနှင့် အပိုင်းအခြားများကို ကြည့်ရှုခြင်း။

ဆက်တိုက်မဟုတ်သော လိုင်းများ သို့မဟုတ် အပိုင်းအခြားတစ်ခုထက်ပို၍ စိတ်ဝင်စားနေခြင်း ဖြစ်နိုင်သည်။ myfile.txt မှ စာကြောင်း 5-7 နှင့် 10-13 ကို ပြကြပါစို့။

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

သင်တွေ့မြင်ရသည့်အတိုင်း၊ -e option သည် အပိုင်းတစ်ခုစီအတွက် ပေးထားသောလုပ်ဆောင်ချက် (ဤကိစ္စတွင်၊ ပရင့်လိုင်းများ) ကို လုပ်ဆောင်ရန် ကျွန်ုပ်တို့အား ခွင့်ပြုပါသည်။

4. စကားလုံးများ သို့မဟုတ် စာလုံးများကို အစားထိုးခြင်း (အခြေခံ အစားထိုးခြင်း)

myfile.txt တွင် version စကားလုံး၏ ဥပမာတိုင်းကို story ဖြင့် အစားထိုးရန်၊ လုပ်ပါ-

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

ထို့အပြင်၊ သင်သည် စာလုံးအသေးကို လျစ်လျူရှုရန်အတွက် g အစား gi ကို အသုံးပြုရန် စဉ်းစားလိုပေမည်။

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

နေရာလွတ်များစွာကို နေရာတစ်ခုတည်းဖြင့် အစားထိုးရန်၊ ကျွန်ုပ်တို့သည် ip route show နှင့် ပိုက်လိုင်း၏ အထွက်ကို အသုံးပြုပါမည်-

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

ip route show ၏ ထွက်ပေါက်အား ပိုက်လိုင်းနှင့် မပါဘဲ နှိုင်းယှဉ်ပါ-

5. အပိုင်းအခြားတစ်ခုအတွင်းရှိ စကားလုံးများ သို့မဟုတ် စာလုံးများကို အစားထိုးခြင်း။

အကယ်၍ သင်သည် မျဉ်းအကွာအဝေး (ဥပမာ 30 မှ 40 အတွင်းသာ စကားလုံးများကို အစားထိုးရန်) စိတ်ဝင်စားပါက သင်လုပ်ဆောင်နိုင်သည်-

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

ဟုတ်ပါတယ်၊ သင်သည် အပိုင်းအခြားအစား ၎င်း၏သက်ဆိုင်ရာနံပါတ်မှတဆင့် မျဉ်းတစ်ကြောင်းကို ညွှန်ပြနိုင်ပါသည်။

6. ပုံမှန်အသုံးအနှုန်းများကိုအသုံးပြုခြင်း (အဆင့်မြင့်အစားထိုးခြင်း) – I

တခါတရံတွင် configuration ဖိုင်များကို မှတ်ချက်များဖြင့် တင်ပါသည်။ ၎င်းသည် သေချာပေါက်အသုံးဝင်သော်လည်း၊ ၎င်းတို့အားလုံးကို တစ်ချက်ကြည့်လိုပါက တစ်ခါတစ်ရံတွင် configuration ညွှန်ကြားချက်များကိုသာ ပြသရန် အထောက်အကူဖြစ်နိုင်ပါသည်။

Apache configuration file မှ # ဖြင့်စသော လိုင်းအလွတ်များ သို့မဟုတ် # ကိုဖယ်ရှားရန်၊ လုပ်ဆောင်ပါ-

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

နံပါတ်သင်္ကေတ (^#) ၏နောက်တွင် ဂရုတစိုက်သင်္ကေတသည် မျဉ်းတစ်ကြောင်း၏အစကို ညွှန်ပြသော်လည်း ^$ သည် မျဉ်းဗလာများကိုကိုယ်စားပြုသည်။ ဒေါင်လိုက်ဘားများသည် ဘူလီန်လုပ်ဆောင်မှုများကို ညွှန်ပြပြီး ဒေါင်လိုက်ဘားများကို ရှောင်ရန် နောက်ပြန်မျဉ်းစောင်းကို အသုံးပြုသည်။

ဤကိစ္စတွင်၊ Apache configuration ဖိုင်တွင် အချို့သောလိုင်းများ၏အစတွင်မဟုတ်ဘဲ #'s ပါသော လိုင်းများပါရှိပြီး၊ ထို့ကြောင့် *# ကို ၎င်းတို့ကိုလည်း ဖယ်ရှားရန် အသုံးပြုပါသည်။

7. ပုံမှန်အသုံးအနှုန်းများကိုအသုံးပြုခြင်း (အဆင့်မြင့်အစားထိုးခြင်း) – II

စာလုံးကြီး (သို့) စာလုံးသေးဖြင့် အစပြုသော စကားလုံးကို အခြားစကားလုံးဖြင့် အစားထိုးရန် sed ကို သုံးနိုင်သည်။ ဥပမာအနေဖြင့်၊ myfile.txt တွင် ဇစ် သို့မဟုတ် ဇစ်ကို rar ဖြင့် အစားထိုးလိုက်ကြပါစို့။

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

8. ပေးထားသည့်ပုံစံဖြင့် ပါဝင်သော လိုင်းများကို ကြည့်ရှုခြင်း။

sed ၏နောက်ထပ်အသုံးပြုမှုမှာ ပေးထားသောပုံမှန်အသုံးအနှုန်းနှင့်ကိုက်ညီသောဖိုင်တစ်ခုမှစာကြောင်းများကိုပုံနှိပ်ခြင်းတွင်ပါဝင်သည်။ ဥပမာအားဖြင့်၊ CentOS 7 ဆာဗာရှိ /var/log/secure log အရ ဇူလိုင်လ 2 ရက်နေ့တွင် ပြုလုပ်ခဲ့သော ခွင့်ပြုချက်နှင့် အထောက်အထားစိစစ်ခြင်းဆိုင်ရာ လုပ်ဆောင်ချက်များကို ကြည့်ရှုရန် ကျွန်ုပ်တို့ စိတ်ဝင်စားနိုင်ပါသည်။

ဤကိစ္စတွင်၊ ရှာဖွေရမည့်ပုံစံမှာ စာကြောင်းတစ်ခုစီ၏အစတွင် ဇူလိုင်လ 2 ရက်နေ့ဖြစ်သည်-

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

9. ဖိုင်များတွင် နေရာလွတ်များ ထည့်သွင်းခြင်း။

sed ဖြင့်၊ ကျွန်ုပ်တို့သည် ဖိုင်တစ်ခုတွင် အလွတ်မဟုတ်သော စာကြောင်းတစ်ခုစီအတွက် space (အလွတ်လိုင်းများ) ကိုလည်း ထည့်သွင်းနိုင်သည်။ လိုင်စင်၊ ရိုးရှင်းသောစာသားဖိုင်တွင် အခြားစာကြောင်းတစ်ကြောင်းကို ဗလာတစ်ကြောင်းထည့်ရန်၊

# sed G myfile.txt

အလွတ်လိုင်းနှစ်ခုကို ထည့်ရန်၊

# sed 'G;G' myfile.txt

အလွတ်စာကြောင်းများ ထပ်ထည့်လိုပါက စာလုံးကြီး G ကို မျဉ်းကော်လံတစ်ခုဖြင့် ပိုင်းခြားပါ။ အောက်ပါပုံသည် ဤအစွန်အဖျားတွင် ဖော်ပြထားသော ဥပမာကို သရုပ်ဖော်သည်-

ကြီးမားသော configuration ဖိုင်ကို စစ်ဆေးလိုပါက ဤအကြံပြုချက်သည် အဆင်ပြေနိုင်သည်။ အခြားစာကြောင်းတိုင်းတွင် နေရာလွတ်တစ်ခုကို ထည့်သွင်းပြီး အထွက်ကို လျှော့ထည့်ခြင်းဖြင့် စာဖတ်ခြင်းအတွေ့အကြုံကို ပိုမိုအဆင်ပြေစေမည်ဖြစ်သည်။

10. dos2unix ကို inline တည်းဖြတ်ခြင်းဖြင့် အတုယူခြင်း။

dos2unix ပရိုဂရမ်သည် Windows/Mac ဖော်မတ်ချခြင်းမှ ရိုးရိုးစာသားဖိုင်များကို Unix/Linux သို့ ပြောင်းပေးကာ ထိုပလပ်ဖောင်းများတွင် အသုံးပြုသည့် စာသားတည်းဖြတ်သူအချို့မှ ထည့်သွင်းထားသော ဝှက်ထားသော လိုင်းအသစ်စာလုံးများကို ဖယ်ရှားသည်။ သင့် Linux စနစ်တွင် မတပ်ဆင်ပါက၊ ၎င်းကို ထည့်သွင်းမည့်အစား sed ဖြင့် ၎င်း၏ လုပ်ဆောင်နိုင်စွမ်းကို တုပနိုင်သည်။

ဘယ်ဘက်ရှိ ပုံတွင် DOS newline စာလုံး (^M) အများအပြားကို တွေ့နိုင်သည်၊ နောက်ပိုင်းတွင် ဖယ်ရှားခဲ့သည်-

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

-i option သည် နေရာတွင် တည်းဖြတ်ခြင်းကို ဖော်ပြကြောင်း ကျေးဇူးပြု၍ သတိပြုပါ။ ထို့နောက် ပြောင်းလဲမှုများကို ဖန်သားပြင်သို့ ပြန်သွားမည်မဟုတ်သော်လည်း ဖိုင်တွင် သိမ်းဆည်းသွားမည်ဖြစ်သည်။

မှတ်ချက်- Ctrl+V နှင့် Ctrl+M ဖြင့် vim editor တွင် ဖိုင်တစ်ခုကို တည်းဖြတ်နေစဉ် DOS newline စာလုံးများ ထည့်သွင်းနိုင်သည်။

11. မူရင်းဖိုင်ကို တည်းဖြတ်ပြီး အရန်သိမ်းပါ။

ယခင်အကြံပြုချက်တွင် ဖိုင်တစ်ခုကို ပြင်ဆင်ရန် sed ကို အသုံးပြုခဲ့သော်လည်း မူရင်းဖိုင်ကို မသိမ်းဆည်းခဲ့ပါ။ တစ်ခါတစ်ရံတွင် မူရင်းဖိုင်၏ အရန်မိတ္တူကို သိမ်းဆည်းရန် စိတ်ကူးကောင်းတစ်ခုဖြစ်သည်။

ထိုသို့လုပ်ဆောင်ရန်၊ မူရင်းဖိုင်ကို အမည်ပြောင်းရန်အတွက် အသုံးပြုရန်အတွက် -i ရွေးချယ်မှု (ကိုးကားချက်များအတွင်း) ၏နောက်ဆက်တွဲကို ဖော်ပြပါ။

အောက်ဖော်ပြပါ ဥပမာတွင်၊ ဤ သို့မဟုတ် ဤ (လျစ်လျူရှုခြင်းကိစ္စ) အားလုံးကို myfile.txt တွင် အစားထိုးမည်ဖြစ်ပြီး မူရင်းဖိုင်ကို myfile.txt.orig အဖြစ် သိမ်းဆည်းပါမည်။

နောက်ဆုံးအနေနဲ့၊ ဖိုင်နှစ်ခုကြားက ကွဲလွဲမှုတွေကို ခွဲခြားသိရှိနိုင်ဖို့ diff utility ကို အသုံးပြုပါမယ်။

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

12. စကားလုံးအတွဲများကို ပြောင်းခြင်း။

သင့်တွင် First name, Last name ဖော်မတ်တွင် နာမည်အပြည့်အစုံပါသော ဖိုင်တစ်ခုရှိသည်ဆိုပါစို့။ ဖိုင်ကို လုံလောက်စွာလုပ်ဆောင်ရန်၊ သင်သည် နောက်ဆုံးအမည်နှင့် ပထမအမည်ကို ပြောင်းလိုပေမည်။

ကျွန်ုပ်တို့သည် ၎င်းကို sed ဖြင့် မျှမျှတတ လွယ်ကူစွာ ပြုလုပ်နိုင်သည်-

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

အထက်ဖော်ပြပါပုံတွင် နံပါတ် ၁ နှင့် ၂ ကဲ့သို့သော အထူးအက္ခရာများဖြစ်သည့် ကွင်းစဥ်များကို ကျွန်ုပ်တို့ တွေ့မြင်နိုင်သည်။

ဤနံပါတ်များသည် မီးမောင်းထိုးပြထားသော ပုံမှန်အသုံးအနှုန်းများကို ကိုယ်စားပြုသည် (ကွင်းအတွင်းတွင် ပေါ်လာရန် လိုအပ်သည်-။

  1. 1 သည် ကော်မာအထိ စာကြောင်းတစ်ခုစီ၏အစကို ကိုယ်စားပြုသည်။
  2. 2 သည် စာကြောင်း၏အဆုံးအထိ ကော်မာ၏ညာဘက်ရှိ အရာအားလုံးအတွက် နေရာတစ်ခုဖြစ်သည်။

လိုချင်သော output ကို SecondColumn (နောက်ဆုံးအမည်) + ကော်မာ + space + FirstColumn (ပထမအမည်) ဖော်မတ်ဖြင့် ညွှန်ပြထားသည်။ သင်ဆန္ဒရှိတိုင်းကို လွတ်လပ်စွာပြောင်းလဲလိုက်ပါ။

13. သီးခြားကိုက်ညီမှုရှိမှ စကားလုံးများကို အစားထိုးပါ။

တစ်ခါတစ်ရံတွင် ပေးထားသောစကားလုံးတစ်လုံး၏ သာဓကအားလုံးကို အစားထိုးခြင်း သို့မဟုတ် ကျပန်းအနည်းငယ်ကို အစားထိုးခြင်းသည် ကျွန်ုပ်တို့လိုအပ်သောအရာကို အတိအကျမဟုတ်ပါ။ သီးခြားကိုက်ညီမှုတစ်ခုတွေ့ရှိပါက အစားထိုးမှုပြုလုပ်ရန် လိုအပ်ပါသည်။

ဥပမာအားဖြင့်၊ တူညီသောစာကြောင်းတွင် စကားလုံးဝန်ဆောင်မှုများကို တွေ့ရှိမှသာ start နှင့် stop အစားထိုးလိုနိုင်ပါသည်။ ထိုအခြေအနေတွင်၊ ဤအရာသည် အဘယ်အရာဖြစ်လိမ့်မည်နည်း၊

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

ပထမစာကြောင်းတွင်၊ ဒုတိယစာကြောင်းနှင့်ဆန့်ကျင်သည့်စကားလုံးဝန်ဆောင်မှုများသည် ထိုစာကြောင်းတွင်မပေါ်သောကြောင့် start နှင့် အစားထိုးမည်မဟုတ်ပါ။

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

14. တစ်ကြိမ်တည်း သို့မဟုတ် နှစ်ခုထက်ပိုသော အစားထိုးမှုပြုလုပ်ခြင်း။

တစ်ခုတည်းသော sed အမိန့်တစ်ခု သို့မဟုတ် နှစ်ခုထက်ပိုသော အစားထိုးမှုများကို သင်ပေါင်းစပ်နိုင်သည်။ myfile.txt တွင် စာကြောင်းပါသော စကားလုံးများကို This and verse ဖြင့် အစားထိုးလိုက်ကြပါစို့။

semicolon နှင့် ဒုတိယ အစားထိုး command ကို အသုံးပြု၍ ၎င်းကို မည်သို့လုပ်ဆောင်နိုင်သည်ကို သတိပြုပါ-

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

ဤအကြံပြုချက်ကို အောက်ပါပုံတွင် ဖော်ပြထားပါသည်။

15. sed နှင့် အခြား command များကို ပေါင်းစပ်ခြင်း။

ဟုတ်ပါတယ်၊ sed က ပိုအစွမ်းထက်တဲ့ command တွေကို ဖန်တီးဖို့အတွက် တခြားကိရိယာတွေနဲ့ ပေါင်းစပ်နိုင်ပါတယ်။ ဥပမာ၊ အကြံပြုချက် #4 တွင်ပေးထားသော ဥပမာကိုသုံး၍ ip route command ၏ output မှ ကျွန်ုပ်တို့၏ IP လိပ်စာကို ထုတ်ယူကြပါစို့။

ကျွန်ုပ်တို့သည် src ဟူသော စာလုံးကို ရိုက်နှိပ်ခြင်းဖြင့် စတင်ပါမည်။ ထို့နောက် ကျွန်ုပ်တို့သည် နေရာများစွာကို တစ်ခုတည်းအဖြစ်သို့ ပြောင်းလဲပါမည်။ နောက်ဆုံးတွင်၊ IP လိပ်စာတည်ရှိရာနေရာဖြစ်သည့် (ကွက်လပ်တစ်ခုအား ကွက်လပ်ခြားနားခြင်းအဖြစ် ထည့်သွင်းစဉ်းစားခြင်း) 9th အကွက်ကို ဖြတ်ပါမည်။

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

အောက်ပါပုံသည် အထက်ဖော်ပြပါ command ၏ အဆင့်တစ်ခုစီကို သရုပ်ဖော်သည်-

အကျဉ်းချုပ်

ဤလမ်းညွှန်တွင် သင်၏နေ့စဥ်စနစ်စီမံခန့်ခွဲခြင်းလုပ်ငန်းဆောင်တာများကို ကူညီရန် 15 sed အကြံပြုချက်များနှင့် လှည့်ကွက်များကို မျှဝေထားပါသည်။ သင်ပုံမှန်အသုံးပြုပြီး ကျွန်ုပ်တို့နှင့် အခြားအသိုင်းအဝိုင်းနှင့် မျှဝေလိုသည့် အခြားအကြံပြုချက်များ ရှိပါသလား။

သို့ဖြစ်ပါက အောက်ဖော်ပြပါ မှတ်ချက်ဖောင်ကို အသုံးပြု၍ ကျွန်ုပ်တို့အား အသိပေးပါ။ မေးခွန်းများနှင့် မှတ်ချက်များကိုလည်း ကြိုဆိုပါသည် - သင့်ထံမှ ကြားနာရန် ကျွန်ုပ်တို့ မျှော်လင့်ပါသည်။