日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

s-sed(stream editor) 文本填充和编辑 基本使用

發布時間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 s-sed(stream editor) 文本填充和编辑 基本使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

        • 前言
        • 語法格式
        • sed 操作地址
        • sed子命令
        • sed正則表達式
        • sed使用實例
          • 打印命令 p
          • 刪除命令 d
          • 替換命令 s
          • 指定操作地址的范圍 逗號 ,
          • 多重編輯命令 e
          • 下行插入命令 a
          • 上行插入命令 i
          • 修改命令 c
          • 獲取下一行命令 n
          • 轉換命令 y
          • 退出命令 q
        • 總結

前言

sed是一個“非交互”式的字符流編輯器,能夠很好得完成對多個文件的一系列編輯工作。sed提供的功能好像是交互式腳本的自然延伸,它提供的查找和替換程序可以被全局的應用于單個文件或者一組多個文件之中。

sed相對于交互式的vi/vim編輯器的優點是:

  1. sed能夠在一個地方指定所有的編輯指令(查找、替換、刪除、插入等),然后通過文件傳遞一次來執行它們。不必進入每個文件進行修改。
    vi/vim針對以上編輯指令(查找、替換、刪除、插入等)則需要消耗大量的時間。

  2. sed能夠保持整個文檔的一致性。可以通過查找某一個特定術語的所有不同的使用方式,使得它們能夠變得一致

  3. sed支持編寫大量的轉換程序

總結:sed能夠讓我們在批量處理不同模式的文件(查找、替換、刪除、插入等)時更為便捷


語法格式

sed [OPTION]... {script-only-if-no-other-script} [input-file]...


選項 說明

  • -n 使用安靜模式,在一般情況所有的 STDIN 都會輸出到屏幕上,加入-n 后只打印被 sed 特殊處理的行
  • -e 多重編輯,且命令順序會影響結果
  • -f 指定一個 sed 腳本文件到命令行執行,
  • -r Sed 使用擴展正則
  • -i 直接修改文檔讀取的內容,不在屏幕上輸出

sed 操作地址

sed在沒有指定操作行范圍時,默認操作所有行

  • number 僅僅匹配指定的行號,并進行操作;比如使用安靜模式,打印某一個文件的第十行sed -n 10p test.txt
  • first~step 匹配從first起始,每隔step行匹配一次;比如sed -n 2~5p test.txt 表示從第二行開始,每隔5行打印一次,即打印:2,7,12,17…行
  • $ 匹配最后一行 sed -n '$'p test.txt
  • /REGEXP/ 這個是表示匹配正則那一行,通過//之間的正則來匹配, sed -n /[0-9]/p test.txt 匹配包含0-9中任意數字的行
  • \cREGEXPc 這個是表示匹配正則那一行,通過\c 和 c 之間的正則來匹配,c 可以是任一字符 sed -n '\m[0-9]m'p test.txt 匹配包含0-9中任意數字的行
  • 0,addr2 從首行開始,直到找到addr2,這里addr2需要為正則時,0才能夠生效;類似于1,addr2從第一行開始。 其中addr2可以為數字,字符串,正則表達式;sed -n 0,/[0-9]/p test.txt ,這里addr2為正則,所以可以從0開始;
  • addr1,+N 從 addr1 這行到往下 N 行匹配,總共匹配 N+1 行;sed -n /[0-9]/,+5p test.txt 從第一個包含數字的行開始向下找5行
  • addr1,~N 從addr1這一行向下匹配,直到匹配行號中包含N的倍數即打印;sed -n /[0-9]/,~7p test.txt ,即匹配包含數字的行號開始,到某一個行號能夠被7整除為止

sed子命令

sed子命令主要是操作地址指定的各個行需要執行的方式,如果沒有指定操作地址,則默認執行針對所有行

  • = 打印當前篩選出來的行號 sed -n /[0-9]/,~7= test.txt,從test.txt中篩選包含數字的行,且只打印行數
  • a\ 在當前行下添加一行或者多行 sed /[0-9]/,~7a\111 test.txt 向text.txt中包含數字的指定行下添加111字符串
  • i\ 在當前行之上添加一行或者多行 sed /[0-9]/,~7i\111 test.txt 向test.txt中包含數字的指定行上添加111字符串
  • q 結束或者退出sed
  • Q 結束退出sed
  • c\ 用新文本替換(修改)當前行的文本 sed /[0-9]/,~7c\aa test.txt 用aa代替包含數字的文本
  • h 把模式空間的內容復制到暫存空間
  • H 把模式空間的內容追加到暫存空間
  • g 把暫存空間的內容復制到模式空間(用作替換指定行中指定內容的字符串)
  • G 把暫存空間的內容追加到模式空間(用作向指定行中指定內存追加字符串)
  • -l width 列出非打印字符(結束符$,width表示寬度) sed -n /[0-9]/,+7l2 test.txt
  • p 打印行
  • r 從文件中讀取輸入行
  • ! 對所選行之外的所有行應用命令
  • s/regexp/replacement/ 替換命令
  • d 刪除行

sed正則表達式

sed使用實例

制造測試文件如下:top -u ceph -b -n 1|grep PID -A 10 > test.txt

打印命令 p

命令 p 是打印命令,用于顯示模式緩存區的內容。默認情況下, sed 把輸入行打印在屏幕上,同時將選定內容也打印出來,選項-n 用于取消默認打印操縱。當選項-n 和命令 p 同時出現時, sed 可打印選定的內容
sed '/27023/p' test.txt

sed -n '27023/p' test.txt

刪除命令 d

命令 d 用于刪除輸入行。sed 先將輸入行從文件復制到模式緩存區,然后對該行執行 sed命令,最后將模式緩存區的內容顯示在屏幕上。如果發出的是命令 d,當前模式緩存區的輸入行會被刪除,不被顯示

sed '27023/d' test.txt 已經刪除了2703所在的行,默認會將所有行打印到屏幕

sed '3,$d' test.txt 使用操作地址的命令,刪除從第三行開始到行末的所有行

sed '/ceph-osd/d' test.txt 刪除所有包含ceph-osd字符串的行

替換命令 s

替換命令s大體的格式為s/regexp/replacement/,s后的第一個字符串包含正則表達式,第二個字符串為需要替換掉的內容;可以使用g標記對行進行全部替換

  1. sed 's/ceph-osd/testsed/g' test.txt 將所有包含ceph-osd的字符串替換為testsed字符串

  2. sed -n 's/^2/3/p' test.txt 將所有開頭為2的字符串替換為3,并且使用-n和p命令,僅將替換的字符串打印出來

  3. sed -n 's/osd$/&.sed/p' test.txt 當“與”符號( &)用在替換串中時,它代表在查找串中匹配到的內容以osd結尾時在其后增加字符串.sed

  4. sed -n 's/20/ceph-sed/gp' test.txt 使用g將全局中所有包含20的字符串替換為ceph-sed

  5. sed -n 's/\(ceph\)-osd/\1sed/gp' test.txt 包含在圓括號里的模式 ceph 作為標簽 1 保存在特定的寄存器中。替換串可以通過\1 來引用它。則 ceph-osd 被替換為 cephsed

  6. sed -n 's#20#ceph-sed#gp' test.txt sed中s之后的字符就是查找串和替換串之間的分隔符,分隔符默認為正斜杠,但其實只要任意跟在s之后的字符(換行符和反斜線除外)都可以作為分隔符。這個方法在查找包含正斜杠模式時很管用,例如查找路徑名或生日

指定操作地址的范圍 逗號 ,

sed -n '/ceph-mon/,/ceph-mgr/p' test.txt 指定打印從ceph-mon行開始到ceph-mgr行結束

sed -n '5,/ceph-osd/p' test.txt 打印從第5行開始到ceph-osd所在行結束

sed -n '5,/ceph-osd/s/osd$/sed/gp' test.txt 從第5行開始到遇到ceph-osd字符串所在行之間,將以osd字符串結尾的行替換為以sed結尾

多重編輯命令 e

sed -e '1,3d' -e 's/ceph-osd/ceph-sed/g' test.txt 用于 sed 執行多個編輯任務的情況下。在下一行開始編輯前,所有的編輯動作將應用到模式緩存區的行上。因為是逐行進行這兩行編輯(即這兩個命令都在模式空間的當前行上執行),所以編輯命令的順序會影響結果。

下行插入命令 a

a 命令是追加命令,追加將新文本到文件中當前行(即讀入模式的緩存區行)的后面。不管是在命令行中,還是在 sed 腳本中, a 命令總是在反斜杠的后面。
sed '/osd$/a\ hello sed' test.txt 在osd結尾的行的下面追加一行hello sed,同時hello sed前增加一個空格

上行插入命令 i

i命令類似于a命令,追加新的文本到文件當前行的前面。
sed '/m[a-z][a-z]$/i\ hello sed' test.txt 在以mon,mgr,mds結尾的行之上增加一行hello world

修改命令 c

c命令可以將已有的文本進行修改,并覆蓋舊文本
sed '/m[a-z][a-z]$/c hello sed' test.txt 將mon,mgr,mds結尾的行修改為hello sed,并覆蓋原來的行

獲取下一行命令 n

n 命令表示下一條命令。 sed 使用該命令獲取輸入文件的下一行,并將其讀入到模式緩沖區中,任何 sed 命令都將應用到匹配行,緊接著的下一行上
sed '/mgr$/{n;s/ceph-osd/ceph-sed/;}' test.txt 將以mgr結尾的下一行中,ceph-osd字符串替換為ceph-sed

轉換命令 y

y 命令表示轉換。該命令與 tr 命令相似,字符按照一對一的方式從左到右進行轉換。例如 y/abc/ABC/,會把小寫字母轉換成大寫字母, a–>A,b–>B,c–>C
sed '1,$y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' test.txt 從頭到位,將字符串中小寫字母轉換為大寫字母

退出命令 q

sed '/mgr$/{n;s/ceph-osd/ceph-sed/;q;}' test.txt 執行到替換mgr行的下一行之后就退出,不繼續打印

總結

sed的命令的優勢不必多言,詳細看到并實踐到這里的伙伴們已經深有體會。在對多個文件進行批量處理的時候Sed的作用無疑是巨大省時得,但是它并不能對多個不同的模式使用同一套規則進行處理。針對不同的字符串模式,sed需要編寫不同的匹配串進行處理,這個時候awk就能夠華麗登場,取編寫匹配規則進行文本處理。關于awk的系統性整理學習,后期將持續進行。

參考博文:
https://www.cnblogs.com/ginvip/p/6376049.html

總結

以上是生活随笔為你收集整理的s-sed(stream editor) 文本填充和编辑 基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。