sed命令特點
sed命令既可以直接輸入到控制檯中執行,也可以放在指令碼檔案中執行
sed對於傳入的資料流會逐行的讀取
對於每行中匹配到的資料才會使用命令進行修改
它並不會修改原始的資料
生成的新資料會輸出到stdout,一般是控制檯,也可以輸出到檔案
(1)使用管道命令輸入資料
(2)替換檔案中的資料
1.log
我們直接處理
如果需要把生成的新資料輸出到一個特定的檔案中,可以使用重定向大於號:
(3)將命令寫在檔案中
有時我們會反覆用一些命令,如果每次都需要手動輸入那就太麻煩了,好在我們可以把這些匹配命令寫在一個檔案中
看上圖,我們現在把命令寫在了
s.sed
(4)替換標記
我們可以認為每個替換命令就是一個正則表示式,所以每單個命令在一行中只會被使用一次,靠前的命令會被優先使用,要想全域性匹配可以在命令後面加一個g
可以發現第一行在加上g的情況下,已經被完全匹配,這個g也可以被數字代替,指定替換第幾個位置。
也可以使用w來將生成的新資料輸入到檔案中,但是在多條命令情況不是很好用!
(5)單行替換
文章開頭說了,sed會一行一行的查詢,有時我們只想替換指定行的資料,那應該怎麼辦呢?可以在s字母前面加一個數字代表第幾行
看上圖只替換了第二行的資料。
我們還可以指定行區間`開始行+逗號+結束行`
如上圖,第一條命令替換第二行和第三行的資料($代表最後一行)
注意,對於這種方式的多條命令指定的行數只對單條命令生效!當然我們可以用大括號將所有的匹配命令括起來,把指定的行放在大括號的左側,那麼指定的行就會作用於多條命令,如下圖:
另外還有一種方式可以指定特定的行,就是在s前面再加一個文字匹配命令,如下圖:
我們用These這個字元匹配第二行(These字串前面必須加上斜槓)
無論是行數字匹配還是文字匹配都沒問題。
匹配了These和Those字元之間的三行。
這兩個命令和js中insert、append語義一樣,果然語言都是相通的!
這兩個命令比較簡單,但是要注意前面的行不能是區間,這個應該比較好理解!
這個命令會替換整行資料,修改行可以使用行數區間
命令格式 y/originchar/replacechar/,originchar和replacechar必須一一對應的,否則會報錯!
這個也比較簡單就不多說了。
上面我們提到向檔案中輸出資料可以使用w,那麼從檔案中讀取資料可以用r,如下圖:
我們很輕鬆的就將
2.log
r前面可以是行數也可以是文字匹配。
這裡只是sed命令的一部分,還有很多其他的用法,後續有空我再接著寫!
另外,前端學習linux命令還是很有必要的,因為我們要經常使用node,它無論作為伺服器還是工具都可以配合這些命令。
sed命令特點
sed命令既可以直接輸入到控制檯中執行,也可以放在指令碼檔案中執行
sed對於傳入的資料流會逐行的讀取
對於每行中匹配到的資料才會使用命令進行修改
它並不會修改原始的資料
生成的新資料會輸出到stdout,一般是控制檯,也可以輸出到檔案
替換命令使用s(1)使用管道命令輸入資料
(2)替換檔案中的資料
1.log
是我們的資料檔案我們直接處理
1.log
這個檔案的資料,並且這次我們使用兩個匹配命令(用分號隔開就行,前面加了一個-e,其實不加-e也沒問題),可以發現處理後的資料已經正確的打印出來了,如果你再去檢視1.log
的資料,會發現sed 並不會修改原始檔中的資料。如果需要把生成的新資料輸出到一個特定的檔案中,可以使用重定向大於號:
(3)將命令寫在檔案中
有時我們會反覆用一些命令,如果每次都需要手動輸入那就太麻煩了,好在我們可以把這些匹配命令寫在一個檔案中
看上圖,我們現在把命令寫在了
s.sed
檔案中,執行sed命令只需要在前面加-f就可以了,是不是很方便。(4)替換標記
我們可以認為每個替換命令就是一個正則表示式,所以每單個命令在一行中只會被使用一次,靠前的命令會被優先使用,要想全域性匹配可以在命令後面加一個g
可以發現第一行在加上g的情況下,已經被完全匹配,這個g也可以被數字代替,指定替換第幾個位置。
也可以使用w來將生成的新資料輸入到檔案中,但是在多條命令情況不是很好用!
(5)單行替換
文章開頭說了,sed會一行一行的查詢,有時我們只想替換指定行的資料,那應該怎麼辦呢?可以在s字母前面加一個數字代表第幾行
看上圖只替換了第二行的資料。
我們還可以指定行區間`開始行+逗號+結束行`
如上圖,第一條命令替換第二行和第三行的資料($代表最後一行)
注意,對於這種方式的多條命令指定的行數只對單條命令生效!當然我們可以用大括號將所有的匹配命令括起來,把指定的行放在大括號的左側,那麼指定的行就會作用於多條命令,如下圖:
另外還有一種方式可以指定特定的行,就是在s前面再加一個文字匹配命令,如下圖:
我們用These這個字元匹配第二行(These字串前面必須加上斜槓)
無論是行數字匹配還是文字匹配都沒問題。
匹配了These和Those字元之間的三行。
插入i和附加a這兩個命令和js中insert、append語義一樣,果然語言都是相通的!
這兩個命令比較簡單,但是要注意前面的行不能是區間,這個應該比較好理解!
修改行c這個命令會替換整行資料,修改行可以使用行數區間
轉換命令y命令格式 y/originchar/replacechar/,originchar和replacechar必須一一對應的,否則會報錯!
這個也比較簡單就不多說了。
從檔案中讀取資料r上面我們提到向檔案中輸出資料可以使用w,那麼從檔案中讀取資料可以用r,如下圖:
我們很輕鬆的就將
2.log
檔案的資料讀了出來並且插入到了1.log
最後。r前面可以是行數也可以是文字匹配。
這裡只是sed命令的一部分,還有很多其他的用法,後續有空我再接著寫!
另外,前端學習linux命令還是很有必要的,因為我們要經常使用node,它無論作為伺服器還是工具都可以配合這些命令。