linux三劍客之編輯器sed出廠
持續創作,加速成長!這是我參與「掘金日新計劃 · 6 月更文挑戰」的第7天,點選檢視活動詳情
sed
- linux三劍客grep、sed、awk 。不知道你瞭解多少?今天我們來聊聊三劍客之一的sed。
- 我們可以將sed理解成一種編輯器。sed只是針對檔案進行編輯並將結果輸出在終端。整個過程對原始檔是不會做任何修改的。所以sed在某種程度上來說可以說是沒有破壞性的。但是sed又提供重定向來儲存結果,這個操作有可能破壞原始檔。
語法結構
命令模式
sed [option] 'sed command' filename
指令碼模式
sed [option] -f 'sed script' filename
option列表
| 引數 | 含義 |
| ------------------- | --------------------------------------------- |
| -n | 僅將匹配的行打印出來 |
| -e | 命令模式編輯內容,不影響原始檔 |
| -f | 將sed命令提前寫在檔案中。-f進行載入 |
| --follow-symlinks
| 直接修改檔案時跟隨軟連結 |
| -r | 支援擴充套件模式 ; 同grep -E |
| -i | 修改原始檔內容。如果需要備份則-i "filename"
表示備份到filename檔案 |
| -a | 新增,在指定行後新增資料 |
- 通過圖中我們能夠看出來-e模式針對文字進行修改只是針對終端的。上面我們文字內容為hello。 -e模式先將hello修改為zxh,然後在修改為nihao。但是原始檔並沒有修改
- 上面是sed的命令引數。在命令引數比如-i , -a需要編輯資料時,sed還提供了定位功能。下面我們簡稱編輯命令。
| 編輯命令 | 事例 | 功能 |
| ---- | -------------------------------------------------------- | ----------------------------------------------- |
| a | sed '3a\content' demo.txt
或者sed '$a\content' demo.txt
| 指定行後增加內容;3a表示第三行,$a最後一行。在ma c中\後面需要換行。 |
| i | sed '3i\content' demo.txt
| 指定行之前新增內容 |
| c | sed '3c\hello' demo.txt
| 修改指定行 |
| d | sed '/number 1/,/number 3/d' data.txt
| 刪除文字流中的特定行 |
| n | sed '/content/n' demo.txt
| 移動到選中的下一行 |
| p | sed -n '2p' demo.txt
| 列印資料。-n禁止,p 結合使用輸出匹配行 |
| s | sed '2,$s/dog/cat/' demo.txt
| 將內容替換成新內容 |
| g | sed 's/dog/cat/g'demo.txt
| 也是替換內容。全域性替換 s前指定範圍。g全域性 |
| y | sed 'y/abc/ABC'demo.txt
| 唯一可以處理單個字元的sed編輯器命令a-A,b-B,c-C |
| w | sed '1,2w test.txt' demo.txt
| write 。將流內容寫出到指定檔案中 ; 將demo.txt1,2行資料寫入test.txt |
| r | sed '1,2r test.txt' demo.txt
| read。將檔案內容讀到流中 |
| l | sed -n 'l' demo.txt
| 列表顯示 |
| = | sed -n '=' demo.txt
| 列印行號 |
| {} | sed -n '{=;s/dog/cat/g;p}'
| 組合擴充套件;分號切割 |
- 在mac中我們使用編輯模式新增內容時需要如下操作
a
i
c
d
l
{}
n
常用指令碼
查詢文字中是否包含某內容
echo /bin/bashtesth | sed -n '%/bin/bash% p'
正則查詢某內容
echo helloworld | sed -n '/^hell/ p'
echo helloworld | sed -n '/ld$/ p'
查詢2,4行資料
cat demo.txt | sed -n '2,4p'
正則匹配
- 作為新手的我總感覺Linux中的正則和Java中正則有點不太一樣。Linux里正則用著不是很舒服。
.*^${}+?|()
這些和java一樣都是特殊字元。 - java中匹配所有事
.*
而Linux中.
直接就可以匹配所有 - [] 匹配指定範圍內任意字元
- [^] 匹配出指定範圍外任意字元
echo 12345 | sed -n '/[0-9]+/p'
這個並不能匹配;echo 12345|sed -n '/[0-9][0-9][0-9][0-9][0-9]/p'
可以匹配。這是因為sed和grep一樣需要-E
開啟擴充套件正則echo 12345 | sed -n =E '/[0-9]+/p'
| 特殊含義 | 解釋 | | ----------- | ----------------------------------- | | [[:alpha:]] | 匹配任意字母字元,不管是大寫還是小寫(等價於[a-zA-Z]) | | [[:alnum:]] | 匹配任意字母數字字元0~9、A~Z或a~z(等價於A-Za-z0-9) | | [[:blank:]] | 匹配空格或製表符 | | [[:digit:]] | 匹配0~9之間的數字(等價於[0-9]) | | [[:lower:]] | 匹配小寫字母字元a~z(等價於[a-z]) | | [[:print:]] | 匹配任意可列印字元 | | [[:punct:]] | 匹配標點符號 | | [[:space:]] | 匹配任意空白字元:空格、製表符、NL、FF、VT和CR | | [[:upper:]] | 匹配任意大寫字母字元A~Z(等價於[A-Z]) |
三劍客還剩下一位grep ; 江湖有緣再見
- 避免回表,引入索引下推|提高索引命中率 | 提前下班啦
- TDengine 時序性資料庫為什麼海量資料下不卡頓呢
- 神奇的XPath,快速完成前端及XML的元素定位,茫茫大海不迷路
- springboot通用分支處理---還在硬編碼特殊處理邏輯?超級管理員不應該被區別對待
- Spring事務太強大了,相容資料庫同時給我們提供多種組合應對業務需求
- java物件在記憶體中如何分佈 | java上鎖原來就是記憶體佔位,so easy
- linux三劍客之編輯器sed出廠
- linux三劍客awk教你如何裁剪結果集
- 執行緒池7個引數拿捏死死的,完爆面試官
- 執行緒池存在的意義
- 多年程式設計師總結下來的懶人必備指令碼之進度條⚠️製作
- java中的static關鍵字說清楚還得靠JVM
- 設計模式存在哪些關聯關係,六種關係傻傻分不清--- UML圖示詳解
- 每次需求評審產品總是讓我提高程式碼複用,說白了就是合成複用原則
- 越級上報不可行,各司其職才是王道---迪米特法則
- 偏向鎖/輕量鎖/重級鎖鎖鎖更健康,上鎖解鎖到底是怎麼完成實現的,我來告訴你
- 狸貓換太子里氏替換原則;不要一味的進行抽象否則最後你無法hold你的物件
- 設計模式是我擺脫碼畜的唯一出路---依賴倒轉原則
- 學好數理化,寫遍所有程式碼都不怕,我用數學分類討論的思想解決
- synchronized已經不在臃腫了,放下對他的成見之初識輕量級鎖