iT邦幫忙

DAY 21
3

快快樂樂學會讓電腦幫我做事系列 第 18

[Shell Script] Day21-常用的指令介紹之sed其他功能

一般在使用 script 來修改文件時,除了搜尋取代之外還有新增、刪除、插入以及列印操作。想想看,如果我們在分析 log 檔時,一定會有許多是我們不要的資訊,所以我們只想抓出我們要的關鍵字,但是,一定會需要再將抓出來的資料稍微的做微調修改一下,這時 sed 就又派上用場了。
一般在使用 script 來修改文件時,除了搜尋取代之外還有新增、刪除、插入以及列印操作。想想看,如果我們在分析 log 檔時,一定會有許多是我們不要的資訊,所以我們只想抓出我們要的關鍵字,但是,一定會需要再將抓出來的資料稍微的做微調修改一下,這時 sed 就又派上用場了。

昨天介紹的『搜尋/取代』功能有沒有讓人眼睛為之一亮阿,如果有,接下來介紹的又是更讓人興奮阿!因為如此一來所有的人工作業都可以交由電腦去處理了,自己就可以在旁邊學習進修。

sed 參數清單 (資料取自 鳥哥的私房菜

選項與參數:
-n  :使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN 
      的資料一般都會被列出到螢幕上。但如果加上 -n 參數後,則只有經過
      sed 特殊處理的那一行(或者動作)才會被列出來。
-e  :直接在指令列模式上進行 sed 的動作編輯;
-f  :直接將 sed 的動作寫在一個檔案內, -f filename 則可以執行 filename 內的 
      sed 動作;
-r  :sed 的動作支援的是延伸型正規表示法的語法。(預設是基礎正規表示法語法)
-i  :直接修改讀取的檔案內容,而不是由螢幕輸出。

動作說明:  [n1[,n2]]function
n1, n2 :不見得會存在,一般代表『選擇進行動作的行數』,舉例來說,如果我的動作
         是需要在 10 到 20 行之間進行的,則『 10,20[動作行為] 』

function 有底下這些咚咚:
a   :新增, a 的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)~
c   :取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行!
d   :刪除,因為是刪除啊,所以 d 後面通常不接任何咚咚;
i   :插入, i 的後面可以接字串,而這些字串會在新的一行出現(目前的上一行);
p   :列印,亦即將某個選擇的資料印出。通常 p 會與參數 sed -n 一起運作~
s   :取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配
      正規表示法!例如 1,20s/old/new/g 就是啦!

如果看完這列表還是沒很清楚的話,沒關係,我們來看一下範例:

範例1:顯示文件的 5-10 行

# -n 表示只顯示處理過的資料,因為我們只要印出 5-10 行,所以使用 -n 不要印出其他的資料。
# p 表示顯示的意思
sed –n “5,10p” 檔案名稱

範例2:刪除文件的 3-6 行

# d 代表刪除
sed -n “3,6d” 檔案名稱

綜合範例:如果有一份文件,我想找關鍵字 pajace2001 並且列印出該關鍵字那行的上下個 10 行,我該怎麼做呢?

1.首先,我可以先用 grep –n 關鍵字 (-n 表示在最前方顯示行數)
2.使用sed 搜尋取代功能將行數格式化,(原本顯示的方式是『行數:內文』,將其改成『行數<空格>內文』)
3.再使用 awk 取得行數資料並指派到變數當中
4.使用 sed 列印功能,將方才得到的杭述加十給列印出來!

鐵人賽文章分享
上一篇 常用的指令介紹之快速搜尋取代文件內容
下一篇 常用的指令介紹之看頭看尾


上一篇
[Shell Script] Day20-常用的指令介紹之快速搜尋取代文件內容
下一篇
[Shell Script] Day22-常用的指令介紹之看頭看尾
系列文
快快樂樂學會讓電腦幫我做事27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言