1. 程式人生 > >入門一班 20181017 sed

入門一班 20181017 sed

10月17日任務

10月17日任務
9.4/9.5 sed



sed -n '/關鍵字/'p 檔名


sed -n ‘數字’p 檔名  就是列印第數字行的那一行內容

注意以上的區別,有/ /的是關鍵字  不帶/ / 的是行號


有一個例題:

例如:有個檔案test的內容如下:
ert
fff
**
[abcfd]
123
324
444
[rty]
**
fgfgf
怎麼能擷取
[abcfd]
123
324
444
[rty]
這一部分出來呢?

答案: sed -n '/\[abcfd\]/,/\[rty\]/p' test

解析: 首先判斷是兩個關鍵字,所以基本的形式應該是 sed -n '/關鍵字1/,/關鍵字2/'p filename

因為是[]這種符號所以要加上脫義 \ 所以就 sed -n '/\[abcfd\]/,/\[rty\]/p' test

所以如果不是[]就不需要\來脫義了

image.png

image.png

支援 . * +(脫義),如果不想脫義的話,可以使用-r選項 

image.png

其他的也都是可以匹配的,只是稍微麻煩。


如果想用sed列印指定的行

sed -n '2'p passwd

列印第二行

image.png

sed -n '2,5'p passwd

列印2-5行


sed -n '2,$'p passwd 

列印第二行到最後一行

image.png

sed -n '1,$'p passwd

列印全部的行

image.png



-e表示可以同時執行多條匹配


sed -e '1'p  -e '/root/'p -e '/oo*/'p passwd 

相當於把三個條件滿足的都打印出來



另外sed也可以大小寫全部打印出來,在p前面加上一個I 大寫的I

sed -n  '/bus/'Ip passwd

image.png


sed還有一個作用是顯示剩餘的行,sed '要刪除的行'd filename

sed '1,10'd test,txt

的意思就是列印刪除10行後剩餘的內容

當然也可以按照關鍵字所在的行刪除顯示剩餘的。 比如檢視非root所在行。可以 sed '/root/'d passwd

image.png

image.png

sed 有一個真正刪除的選項 -i  真的會把內容進行更改

sed -i‘行'd filename

image.png

除了按照行號來刪以外還可以按照關鍵字所在的行來刪。

sed -i '/zt/'d passwd 是將含有root的那一行刪掉

image.png


當然sed最重要的功能是查詢替換

sed '1,10s/home/lovebay/g' passwd1

       1-10行  home換成 lovebay g代表全域性 

image.png


sed替換也支援正則。

sed  -r '1,5/lov+/my/g' passwd1 記住要有一個選項 -r

image.png


下面這個替換是將第一位和最後以為進行了互換位置

sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/'  [^:]非:開頭  (.*):一直匹配到最後一個:的位置 最後也是一個非:開頭 然後後面跟的是位置 


基本的做法是將第一個冒號前面 中間 最後一個冒號後面 分成了三部分 然後再將這三部分放到3 2 1的位置上 進行了互換

image.png


如果有/的時候要脫義 \ 或者有其他的符號作為分割符比如@#

head passwd1 |sed 's/\/bin\/bash/123/g'

head passwd1 |sed '[email protected]\/bin\/[email protected]@g'

image.png


如果是想把所有的英文字母刪掉

head passwd1 | sed 's/[a-zA-Z]//g' 這個比較好理解,刪除掉就是替換成空就可以了

image.png


如果想在每一行前面加上aaa如何辦?

兩個辦法,第一個辦法是\1這個位置符前面加東西

head passwd1 | sed -r 's/(.*)/aaa:\1/'

image.png

或者是用&表示前面括號裡的內容

image.png

image.png


關於轉義的擴充套件

在sed命令中有許多的字元都被轉義,比如\ , $, ^,單雙引號還有點號等等,因此使用sed命令進行字串的匹配和修改的時候,字串中如果含有轉義字元,很多情況下不能直接用字元本身表示。這時候可以使用反斜槓加上轉義字元的方法來輸出含轉義字元的字串,但這一方法並不是對所有的轉義字元都有用,過程也較複雜。下面一一說明:

一般而言sed命令格式由三部分組成,sed + 功能選項 + 條件選項,功能選項由連線符號-加上代表不同功能的字母構成,條件選項表明對文字的篩選和處理條件,一般括在單引號或者雙引號中。但兩種引號在sed命令處理的過程中略有不同:
單引號:對其中的內容不做任何處理,即引號內的內容是sed命令定義的格式,對於在條件選項中使用的轉義字元需要使用反斜槓加轉義字元才能輸出。例如:
若定義變數 temp=/home/test/, var=aa
>echo $temp | sed 's/\//$var/g'
輸出結果為:$varhome$vartest$var
你可能會發現並不是所有的轉義字元都需要加反斜槓來輸入(如上例中的$符號),這取決於轉義字元在條件選項中的位置,如果在這個位置字元本身轉義起作用,則需要加反斜槓。即sed命令先檢查字元轉義功能是否成立,若有轉義功能則使用轉義功能,否則按字元輸出。如果你想要輸出該字元時不確定該字元是否會轉義,可以對所有位置新增反斜槓。

雙引號:會對其中的變數進行直接轉換,同樣是上例,如果寫成:
>echo $temp | sed “s/\//$var/g”
則輸出結果為:aahomeaatestaa
可以看出雙引號將變數名直接替換成變數內容。

要想使用單引號得到上面雙引號的輸出結果也是可以做到的,這時候需要對變數名加單引號來處理:
>echo $temp | sed 's/\//'$var'/g'
同樣可以得到輸出結果為:aahomeaatestaa

對於sed命令,如上例單引號命令>echo $temp | sed 's/\//$var/g' 中,我們對斜槓符號的輸出加上了反斜槓,以免被sed命令視為轉義字元功能。我們還可以採用另一種方法無需使用加反斜槓來輸出斜槓字元。在這個命令中,分隔符使用了斜槓(/),因此斜槓預設轉義,sed中是可以使用其他符號作為分符的,如果不使用斜槓作為分隔符,則斜槓預設無轉義功能,時就不需要藉助反斜槓來輸出了:
>echo $temp | sed 's#/#'$var'#g'
這裡我們使用#來代替/當分隔符,因此/不再具有轉義功能,無需再加反斜槓來辨識。同樣可以得到上面的輸出效果。分隔符對單引號和雙引號作用一樣。

若字串中含有單引號,有的時候會發現加反斜槓還是得不到想要的字串輸出。比較簡單的一個做法是字串中有單引號時,功能選項部分用雙引號括起來,這樣不用加反斜槓可以直接輸出字元。例如:
>echo $temp | sed "s#/#'#g"
輸出結果為:'home'test'
同理上例如果寫成:>echo $temp | sed 's#/#\'#g'
則會報錯。因為引號需要成對出現,否則sed命令無法知道第一個引號究竟與第二個還是第三個引號匹配。

若字串中含有雙引號時,功能選項部分用單引號括起來,也可以不使用反斜槓來輸出雙引號。
>echo $temp | sed 's#/#"#g'
輸出結果為:"home"test"
但是,與單引號不同的是,上例如果寫成:>echo $temp | sed "s#/#\"#g",卻不會報錯。這也就很好的解決了如果字串中同時有單雙引號的時候該如何處理的問題。




擴充套件:大小寫轉換

sed中,使用\u表示大寫,\l表示小寫

1. 把每個單詞的第一個小寫字母變大寫:
sed 's/\b[a-z]/\u&/g' filename

2. 把所有小寫變大寫:
sed 's/[a-z]/\u&/g' filename

3. 大寫變小寫:
sed 's/[A-Z]/\l&/g' filename


\b代表邊界符 & 表示 第一個 /  / 裡面的內容





如何使用sed列印1到100行包含某個字串的行

這個需求,其實就是sed指定行範圍匹配,較少見。實現:

sed  -n '1,100{/abc/p}'  1.txt


sed刪除某關鍵字的下一行到最後一行

相關推薦

入門 20181017 sed

10月17日任務 10月17日任務9.4/9.5 sed sed -n '/關鍵字/'p 檔名 sed -n ‘數字’p 檔名  就是列印第數字行的那一行內容 注意以上的區別,有/ /的是關鍵字  不帶/ / 的是行號 有一個例題: 例如:有個檔案test的

入門 20181031 rsync

10月31日任務 10.28 rsync工具介紹10.29/10.30 rsync常用選項10.31 rsync通過ssh同步 Linux檔案同步工具 rsync 非常實用和重要的一個工具。在日常的運維工作中每天都要用到。傳輸檔案從A到B,備份到遠端的資料等都會使用到這個工具。 不僅僅可

入門20181101 rsync syslog screen

11月1日任務 10.32/10.33 rsync通過服務同步10.34 linux系統日誌10.35 screen工具擴充套件1. Linux日誌檔案總管logrotate http://linux.cn/article-4126-1.html2. xargs用法詳解 http://blog.csd

入門20181019 awk

9.6/9.7 awk awk awk相對於sed 更方便的功能是支援了分段。 awk不會更改檔案的內容 最簡單的一種用法,以某種分隔符來分割後,取第幾部分打印出來。 awk -F ':' '{print $1}' passwd -F 分隔符  {$1 第一

入門 20181113 php5 install php7 install

11月13日任務 11.10/11.11/11.12 安裝PHP511.13 安裝PHP7php中mysql,mysqli,mysqlnd,pdo到底是什麼 http://blog.csdn.net/u013785951/article/details/60876816檢視編譯引數 http://as

入門 20181114

11月14日任務 11.14/11.15 Apache和PHP結合11.16/11.17 Apache預設虛擬主機 1. 首先看一下: 這是個警告,雖然並非錯誤但是可以取消掉。辦法就是去定義好 servername  vim /usr/local/apache2/co

github入門

oba 版本 bash .exe use conf arp logs sharp 一、首先安裝gitbash(自行百度)我使用的版本是Git-2.12.2.2-64-bit.exe 二、配置gitbash本地客戶端 1、初始設置 1.1、設置姓名和郵箱地址 git co

Web API 入門

orm 記錄 XML 理解 nbsp 路由規則 api 實現 cli   之前我也了解過Web API 這部分,但是沒有系統學習,更沒有相關記錄,故現在,寫些博客記錄入門學習過程。首先,關於API,只要學習編程的都應該知道,也都用過,API(應用程序編程接口)是一些預先定義

Redis入門

com 最長 array ber 有序列表 ati ash object -s 摘要: Redis支持的數據類型: Binary-safe strings: 字符串 Lists:有序列表;底層維護的是一個鏈表結構,包含字符串元素的集合,有順序、根據插入順序而定 Sets :

Django入門之安裝

路徑 pac 是否 code mage 添加 django 技術 src 1. 習慣性的創建虛擬環境 # 由於我安裝也安裝了pyhton3所以在前面要加python2 -m F:\Python Script\MyVirtualenv>python2 -m virtu

ViewPager 入門

mono port creat not 設置 data- b2c style 新建 使用ViewPager能夠得到不同view的切換效果 例如以下圖,實現了四個view間的相互滑動 一、新建項目,引入ViewPager控件 ViewPager。它是

Spring入門----HelloWorld

sig mct ng2 anr nba abs alpha ont don OC%E5%9F%BA%E7%A1%80%E5%8D%81%E7%B1%BB%E7%9A%84%E6%9C%AC%E8%B4%A8%E5%8F%8Aisa%E6%8C%87%E9%92%88%E5%

Python入門 ()Python3.6安裝

修改 pla color style com www 方便 mar 更改   Python語言現在比較火,在本科學習期間沒有接觸過Python語言,現在打算從頭學起。我的電腦系統是Windows系統。   學習Python語言首先需要在電腦上配置Python環境。可以選擇去

OLAP了解與OLAP引擎——Mondrian入門()

本質 ear 發送 這一 proc pattern 接下來 oracle 簡單 一、 OLAP的基本概念 OLAP(On-Line Analysis Processing)在線分析處理是一種共享多維信息的快速分析技術;OLAP利用多維數據庫技術使用戶從不同角度觀察數據;O

天一命令-sed

sed一天一命令-sedsed - stream editor for filtering and transforming textsed 4.2.2sed是一種流編輯器,讀取一行,處理一行,輸出一行。sed先讀取文件中的一行內容存儲到被稱為模式空間(pattern space)的臨時緩沖區中,接著根據設定

Mybatis新手入門

ack state 插入 操作 one 文件 .org connect 新手 一丶Mybatis是什麽?   MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google cod

日誌入門:日誌級別

交互界面 都是 style 比喻 str 產品 可能 內容 應該 序言 我們經常做項目,都會遇到日誌的記錄,日誌記錄都有統一的標準,下面我們就簡述常見的幾種日誌級別:::::Debug、 Info 、Warn、 Error 、Fatal 日誌級別 Deb

Python爬蟲入門之綜述

復用 智能 實現 進一步 -a web 蜘蛛 urllib 機器 首先爬蟲是什麽? 網絡爬蟲(又被稱為網頁蜘蛛,網絡機器人,在FOAF社區中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動的抓取萬維網信息的程序或者腳本。 根據我的經驗,要學習Python爬蟲,我們要

Java:hibernate入門()

pro limit util ive odin out 負責 控制器 list 一Java三層結構 1 web層:struts框架 2 service層:Spring框架 3 dao層 :hibernate框架 相當於MVC的思想

MongoDB入門

com images show 問題 數據庫 3.0 .com 以及 mongodb入門 mongodb設置用戶名以及密碼, 本人版本是 mongodb 3.4 ,創建用戶名以及密碼 報了這個錯 由於版本的問題, mongodb3.0版本以上不支持 db.addUse