sed基本用法

来源:https://www.cnblogs.com/linyouyi/archive/2018/10/10/9767660.html
-Advertisement-
Play Games

命令格式解析 1.常見命令選項 -n 屏蔽預設輸出 -i 直接修改文本內容 -f 使用sed腳本 -e 可指定多個處理動作 -r 啟用擴展正則表達式,若與其他選項一起使用,應把r放在最前 -{} 可組合多個命令,以分號分割 基本的處理動作 替換操作的分隔符"/"可以用其他字元代替,如&,#,便於修改 ...


命令格式解析

1.常見命令選項

 -n 屏蔽預設輸出

 -i 直接修改文本內容

 -f 使用sed腳本

 -e 可指定多個處理動作

 -r 啟用擴展正則表達式,若與其他選項一起使用,應把r放在最前

 -{} 可組合多個命令,以分號分割

基本的處理動作

p  列印行     4,6p  輸出4,5,6行
 4p,6p  輸出4行,6行
d  刪除行  4,6d  刪除4,5,6行
s  字元串替換 s/old/new/  將每行的第一個old替換成new 
s/old/new/3  將每行的第三個old替換成new 
s/old/new/g  將全部的old替換成new 

替換操作的分隔符"/"可以用其他字元代替,如&,#,便於修改文件路徑

輸出文本
sed -n 'p' aa.txt 輸出書有行,相當於cat aa.txt相同
sed -n '6p' aa.txt 輸出第6行
sed -n '4,7p' aa.txt 輸出4,5,6,7行
sed -n '4,+5p' aa.txt 輸出第4行以及其後的5行
sed -n '/^root/p' aa.txt 輸出以root開頭的行
sed -n 'p,n' aa.txt 輸出奇數行,n表示讀取下一行文本
sed -n 'n,p' aa.txt 輸出偶數行,n表示讀取下一行文本
sed -n '5,${n,p}' aa.txt 輸出從第五行至文件末尾的所有偶數行
sed -n '$=' aa.txt 輸出文件的行數
刪除文本
sed -n '4,7d' aa.txt 刪除4,5,6,7行
sed -n '/bin/d' aa.txt 刪除包含bin的行
sed -n '/bin/!d' aa.txt 刪除不包含bin的行,!表示取反
sed -n '/^bin/d' aa.txt 刪除以bin開頭的行
sed -n '/^$/d' aa.txt 刪除所有空行
sed -n '/^$/{n;/^$/d}' aa.txt 刪除重覆空行,連續的空行只保留一個
替換文本
sed -n 's/aa/AA/' aa.txt 將每行中的第一個aa替換成AA
sed -n 's/aa/AA/4' aa.txt 將每行中的第4個aa替換成AA
sed -n 's/aa/AA/g' aa.txt 將文本所有的aa替換成AA
sed -n 's/aa//g' aa.txt 將文本所有的aa替換成空,相當於刪除
sed -n 's/aa/&s/g' aa.txt 將文本所有的aa替換成aas,&表示查找到的字元
sed -n '4,6s/^/#/' aa.txt 將文本4,5,6行的開頭加上#,相當於註釋代碼
sed -n '4,6s/^#//' aa.txt 將文本4,5,6行的開頭#號去掉,相當於刪除註釋

sed的文本塊處理 

操作符 用途 命令示範
i 行前插入文本 2iAA,在第2行前面插入文本行AA
2,4iAA,在第2-4行每行前面插入文本行AA
a 行後插入文本 2aAA,在第2行後面插入文本行AA
2,4aAA,在第2-4行每行後面插入文本行AA
c 替換當前行 2cAA,把第二行內容替換成AA

導入到處操作

操作符 用途 命令示範 解釋
r 讀取文本 2r a.txt 在第2行的下麵插入a.txt文件
2,4r a.txt 在第2-4行每行下麵插入a.txt文件
w 保存到文件 2w a.txt 將第2行的內容保存為a.txt文件
2,4w a.txt 將第2-4行的內容保存為a.txt文件

sed複製剪切

模式空間

  -存放當前處理的行,將處理的結果輸出

  -若當前行不符合處理條件,則原樣輸出

  -處理完當前行再讀入下一行進行處理

保持空間

  -類似於windows的剪切板

  -預設存放一個空行(換行符 \n)

基本動作

  複製

  H:模式空間--->追加--->保持空間

  h:模式空間--->覆蓋--->保持空間

  粘貼

  G:保持空間--->追加--->模式空間

  g:保持空間--->覆蓋--->模式空間

示範

1)把1-3行複製到文件末尾

[root@localhost ~]# cat a.txt
111
222222
333333333
444444444444
[root@localhost ~]# sed '1,3H;$G' a.txt  #此處有空行時因為第一次是在保持空間里追加,而保持空間預設有一個空行,註意理解H和h,G和g的區別
111
222222
333333333
444444444444

111
222222
333333333
[root@localhost ~]# sed '1h;2,3H;$G' a.txt  #此處沒有空行,因為第一次是覆蓋保持空間的空行
111
222222
333333333
444444444444
111
222222
333333333

2)把第一行剪切到文件末尾

[root@localhost ~]# sed '1h;1d;$G' a.txt
222222
333333333
444444444444
111

3)把第1,2行剪切到文件末尾

[root@localhost ~]# sed '1h;2H;1,2d;$G' a.txt
333333333
444444444444
111
222222

 !取反操作

1)列出不使用bash的用戶有哪些

[root@localhost ~]# sed -n '/bash$/!p' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

 

 修改啟動項

[root@localhost ~]# sed  '/^id/s/[0-6]/3/g' /etc/inittab
id:3:initdefault:

 

其他複雜使用

1)刪除文件中每行的第二個、最後一個字元

分兩次替換操作,第一次替換掉第2個字元,第二次替換掉最後一個字元:

[root@localhost ~]# sed 's/.//2;s/.$//' a.txt

2)刪除文件中每行的第二個、最後一個單詞

分兩次替換操作,第一次替換掉第2個單詞,第二次替換掉最後一個單詞:

[root@localhost ~]# sed -r 's/[a-Z]+//2;s/[a-Z]+([^a-Z]*)$/\1/' a.txt

3)將文件中每行的第一個、第二個字元互換

每行文本拆分為“第1個字元”、“第2個字元”、“剩下的所有字元”三個部分,然後通過替換操作重排順序為“2-1-3”:

[root@localhost ~]# sed -r 's/^(.)(.)(.*)/\2\1\3/' a.txt

4)將文件中每行的第一個、第二個單詞互換

每行文本拆分為“第1個單詞”、“單詞分隔”、“第2個單詞”、“剩下的所有字元”四個部分,然後通過替換操作重排順序為“3-2-1-4”:

[root@localhost ~]# sed -r 's/([a-Z]+)([^a-Z]*)([a-z]+)(.*)/\3\2\1\4/' a.txt

5)刪除文件中所有的數字、行首的空格

因原文件內沒有數字,行首也沒有空格,這裡稍作做一點處理,生成一個新測試文件:

[root@localhost ~]# sed 's/o/o7/;s/l/l4/;3,5s/^/  /' a.txt > b.txt

6)刪除所有數字、行首空格的操作

[root@localhost ~]# sed -r 's/[0-9]//g;s/^( )+//' a.txt

7)為文件中每個大寫字母添加括弧

使用“&”可調用s替換操作中的整個查找串,所以可參考下列操作解決:

[root@localhost ~]# sed 's/[A-Z]/(&)/g' a.txt

  或者

[root@localhost ~]# sed -r 's/([A-Z])/(\1)/g' a.txt

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 經歷一次莫名其妙的懵逼系統崩潰後,我對破解軟體/激活軟體終於有了陰影,想想就想哭,不過怨不了別人,鍋不能隨便甩,怪自己粗心大意,怪自己太懶嗚嗚嗚... 所以有心將這次心路歷程記錄下來,謹防自己下次再犯無腦錯誤!!! 事件起因:為了激活matlab r2017b,在網上找啊找,我知道要激活需要的還是許 ...
  • ssh服務突然連接不了案例總結 一臺Oracle資料庫伺服器(Linux版本為Oracle Linux Server release 5.7)今天中午突然出現短暫的ssh連接不上的情況,ssh連接不上的時候,ping伺服器正常,使用psping檢測埠22也是正常(只返回5個包,沒有持續ping),... ...
  • 1. 安裝的需求背景 我們知道ifconfig 命令可以用於查看、配置、啟用或禁用指定網路介面,如配置網卡的IP地址、掩碼、廣播地址、網關等,功能不可謂不豐富。 此命令的功能和windows系統的ipconfig非常類似。 但是,centos 7 預設已不再安裝此命令,其中很多功能用 ip addr ...
  • 文獻鏈接:http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=8115640&isnumber=8115603 一.背景介紹 基於堆的緩衝區溢出是最近安全事件中被廣泛利用的漏洞之一。攻擊者可以利用高風險堆溢出錯誤來執行任意代碼或者泄露敏感信 ...
  • 命令主要用法 -格式1:前置命令 | awk [選項] '[條件]{編輯指令}' -格式2:awk [選項] '[條件]{編輯指令}' filename 常用命令選項 -F:指定分隔符,可省略(預設空格或者Tab位) -f:調用awk腳本盡心個處理 -V:調用外部shell變數 內置變數 變數 用途 ...
  • ELK簡介 對於日誌來說,最常見的需求就是收集、存儲、查詢、展示,開源社區正好有相對應的開源項目:logstash(收集)、elasticsearch(存儲+搜索)、kibana(展示),我們將這三個組合起來的技術稱之為ELKStack,所以說ELKStack指的是Elasticsearch、Log ...
  • 1. 安裝JDK【java8】 1.1. 軟體安裝 1.2. 環境變數 2. 安裝jenkins 2.1. 軟體安裝 2.2. 啟動jenkins 解決方法修改 jenkins 啟動腳本 再次報錯修改 重啟Jenkins服務 3. 首次訪問Jenkins 根據頁面提示找密碼,輸入即可 離線問題 參考 ...
  • 記錄軟體安裝的過程,比如創建了哪些服務,哪些計劃任務以及啟動項等等。然後軟體安裝完成後把關於軟體的進程,服務,計劃任務等都刪掉。然後手動創建一個腳本,用腳本代替軟體的啟動。比如,如果要啟動sqlserver,我們可以寫一個腳本,先啟動SQL server服務,等等。腳本的內容一般是先啟動程式所需要的... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...