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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...