一些常用的 shell 指令


Posted by Wangpoching on 2021-04-18

前言

cmd 可以讓我們透過輸入指令的方式來操作電腦,比起圖形化介面的好處在於我們擁有更多對電腦的操縱權,不過缺點也是必須要查閱或者熟記這些指令。

底下會介紹三個常用的 shell 指令,如果想要知道更多更 fancy 的 shell 指令,可以參考鳥哥的私房菜-學習 Shell Scripts

常用的 shell 指令們

cut

cut 可以逐行擷取字串,來看看它的用法。

  1. 擷取連續字串

如果想要得到資料夾底下的檔案的權限,可以擷取每一列的第 2 到第 10 個字。

ls -l | cut -c 2-10
  1. 擷取不連續字串

擷取不連續字串時用逗點分開。

ls -l | cut -c 2-3,5-6,8-9
  1. 排除字串

如果想擷取大部分的字串,可以設定不要的字串就好(一樣適用連續與不連續)。

ls -l | cut -c 2-10 --complement
  1. 輸出分隔的字串

如果輸入是逗點分隔檔(.csv),可以設定分隔符號,再搭配前面的用法逐行擷取不同的欄位(一樣適用連續與不連續)。

cut -d , -f 2 test.csv

sed

sed 簡介

sed 是「stream editor」的縮寫,進行串流 (stream) 的編輯,以我的理解,處理串流資料的意義在於處理完資料以後不會將原始資料儲存的概念,以節省空間以及加快速度。

sed 的用法大概如下 sed [options] [scripts] [inputFile],這邊用 Talor Swift 的 Red 的部分歌詞做示範,將部分的歌詞存進 red.txt 裡,內容如下:

Loving him is like
Driving a new Maserati down a dead end street
Loving him is like
Trying to change your mind once you're already flying through the free fall

Losing him was blue like I'd never known
Missing him was dark grey, all alone
Forgetting him was like trying to know somebody You never met
But loving him was red
Loving him was red

常用的 options

  1. -n (沉默模式)
    注意在沉默模式下,不會打印出結果。
sed -n 's/him/her/1' red.txt

Imgur

  1. -e(編輯模式)

注意編輯模式只會打印結果,不會修改原始檔案,並且如果沒有輸入 option,-e 是預設的。

sed -e 's/him/her/1' red.txt

Imgur

  1. -f(讀取檔案腳本)

注意這個模式會讀取存放在檔案中的 sed 程式腳本然後打印出來。
現在假設寫一個腳本 sed_command.txt,內容是

s/him/her/
s/was/is/

接著在終端機輸入:

sed -f sed_command.txt red.txt

Imgur

  1. -i(修改模式)

注意 cat 出來的 red.txt 檔案裡每一行的第一個的 him 已經被取代成 her了,原始檔案被改變了。
註: 之後的範例還是維持原始的 red.txt 檔,也就是說做了一次 sed -i 's/her/him/1' red.txt 讓檔案恢復原狀。

sed -i 's/him/her/1' red.txt
cat red.txt

Imgur

常用的 script

  1. a(append)

在第一行後面加上 an apple

sed '1a an apple' red.txt

Imgur

  1. i(insert)

在第一到第三行的前面都插入 an apple

sed '1,3i an apple' red.txt

Imgur

  1. c(change)

將第二行改成 Living in the heaven

sed '2c Living in the heaven' red.txt

Imgur

  1. d(delete)
    刪除第一到第五行(刪除第一段)。
sed 1,5d red.txt

Imgur

  1. s(substitute)

沿用介紹 -e 時所用的例子,這邊將每一行的第一個 him 給取代成 her,取代的語法可以寫成通式 s/regexp/replacement/[flags],在這個例子裡 flags 是 1,代表每一行的第一個,下面會補充常用的 flags。

sed 's/him/her/1' red.txt

Imgur

如果只想改動第一行:

sed '1 s/him/her/1' red.txt

常用的 flags

  • [0-9]:只搜尋或者取代第 N 個字串
  • g:全部取代
  • I:忽略大小寫
  • w:只顯示符合的結果(行),如果和其他 flags 使用要放在最後面。

exit

exit

可以將終端機給關閉。


#CMD #shell script







Related Posts

原型繼承與原型鏈(待補筆記)

原型繼承與原型鏈(待補筆記)

MTR04_0921

MTR04_0921

裝 nuxt 遇到的問題

裝 nuxt 遇到的問題


Comments