sed用法說明

来源:http://www.cnblogs.com/mfyang/archive/2017/08/01/7270339.html
-Advertisement-
Play Games

sed介紹sed:stream editor是一個行編輯器,或叫流編輯器,每次處理一行,處理完一行再處理下一行。sed並不直接處理源文件,而是讀取一行後放入模式空間(patten space)里,在這個模式空間中完成編輯,並輸出顯示。當然sed加上 –i 參數也可以直接原處理文件。sed不僅有模式空... ...


sed介紹

sed:stream editor

是一個行編輯器,或叫流編輯器,每次處理一行,處理完一行再處理下一行。sed並不直接處理源文件,而是讀取一行後放入模式空間(patten space)里,在這個模式空間中完成編輯,並輸出顯示。當然sed加上 –i 參數也可以直接原處理文件。sed不僅有模式空間,還有一個叫保持空間的概念,模式空間和保持空間的內容可以相互交換,覆蓋,追加等,但是用的較少,用起來也比較燒腦,屬於sed的高級用法。

sed用法

sed [option]… ‘script’ inputfile … …

常用選項:

-n:不輸出模式中的內容到屏幕

-e:多點編輯

-f /path/to/script_file:從指定文件中讀取編輯腳本

-r:支持使用擴展正則表達式

-i:修改原文件

地址定界:

1.不給地址:對全文進行處理

2.單地址:

            #:指定的行

            /pattern/:被此模式所能匹配到的每一行

3.地址範圍:

            #,#:表示從第幾行到第幾行

            #,+#:表示第幾行開始後的多少行

            /pat1/,/pat2/:表示從匹配到模式1開始到匹配到模式2之間的行

編輯命令:

d:刪除

p:顯示

a \text:在行後面追加文本;支持使用\n實現多行追加

i \text:在行前面插入文本;支持使用\n實現多行插入

c \text:替換行為單行或多行文本

w /path/to/somefile 保存模式空間匹配到的行至指定文件中

r /path/from/somefile:讀取指定文件的文本流至模式空間中匹配到的行的行後

=:為模式空間中的行列印行號

!:取反

s///:替換標記,s///g行內全局替換;支持使用其它分隔符,s@@@,s###

用法舉例:

[root@slave ~]# cat ifcfg-ens33 
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="3503f57e-dce7-425e-870f-efbc4897bfb2"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.100.20"
PREFIX="24"
GATEWAY="192.168.100.2"
DNS1="114.114.114.114"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_PRIVACY="no"

1.顯示1到3行的內容

[root@slave ~]# sed -n '1,3p' ifcfg-ens33 
TYPE="Ethernet"
BOOTPROTO="none"DEFROUTE="yes"

2.刪除第2行至最後一行

[root@slave ~]# sed '2,$d' ifcfg-ens33 
TYPE="Ethernet"

3.把192.168.100.20替換成192.168.100.30並只顯示此行

[root@slave ~]# sed -n 's/192.168.100.20/192.168.100.30/;/IPADDR/p' ifcfg-ens33 
IPADDR="192.168.100.30"

4.把所有的IPV6換成ipv6

[root@slave ~]# sed -n '1,$ s/IPV6/ipv6/g;/ipv6/p' ifcfg-ens33 
ipv6INIT="yes"
ipv6_AUTOCONF="yes"
ipv6_DEFROUTE="yes"
ipv6_FAILURE_FATAL="no"
ipv6_ADDR_GEN_MODE="stable-privacy"
ipv6_PEERDNS="yes"
ipv6_PEERROUTES="yes"
ipv6_PRIVACY="no"

5.在第1行之前和第3行後面加入文本“hello sed”,並顯示1到4行

[root@slave ~]# sed -ne '1 i \hello sed\n===============' -e '3 a ===================\n\hello sed' -e '1,4p' ifcfg-ens33 
hello sed
===============
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
===================
hello sed
IPV4_FAILURE_FATAL="no"

6.刪除包含IPV6的行

[root@slave ~]# sed -e '/.*IPV6.*/d' ifcfg-ens33 
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
NAME="ens33"
UUID="3503f57e-dce7-425e-870f-efbc4897bfb2"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.100.20"
PREFIX="24"
GATEWAY="192.168.100.2"
DNS1="114.114.114.114"

7.從文件sedscript讀入sed腳本,要求將BOOTPROTO=”none”改成”static”,註釋掉所有包含IPV6的行,在文件開始和結束行加===sed is a strong tool===,並將網關改成192.168.100.3最後將修改後的內容保存到ifcfg-test文件中

[root@slave sed]# cat sedscript 
#!/bin/sed -f
# this is a sed script
1 i \=== sed is strong tool === 
s/^IPV6/# IPV6/g 
s/none/static/
s/192.168.100.2/192.168.100.3/
$ a \=== sed is strong tool ===
w ifcfg-test
[root@slave sed]# chmod +x sedscript 
[root@slave sed]# ./sedscript ifcfg-ens33 
[root@slave sed]# cat ifcfg-test
TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
# IPV6INIT="yes"
# IPV6_AUTOCONF="yes"
# IPV6_DEFROUTE="yes"
# IPV6_FAILURE_FATAL="no"
# IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="3503f57e-dce7-425e-870f-efbc4897bfb2"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.100.30"
PREFIX="24"
GATEWAY="192.168.100.3"
DNS1="114.114.114.114"
# IPV6_PEERDNS="yes"
# IPV6_PEERROUTES="yes"
# IPV6_PRIVACY="no"
上面這個例子中的i和a插入和追加的內容沒有寫入到文件中,但是用重定向的方式可以。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 啟動docker docker安裝後出現Cannot connect to the Docker daemon You need to add user into docker group. by 'sudo gpasswd -a xxxx docker' (xxx is your user nam ...
  • 搭建Nginx+PHP環境 搭建Nginx+PHP環境用於Memcached的PHP擴展的測試 1. 安裝PHP [root@chunlin PHP] tar zxf php 7.1.5.tar.gz [root@chunlin PHP] cd php 7.1.5 [root@chunlin php ...
  • 開頭指定腳本解釋器 #!/bin/bash 或 #!/bin/sh 開頭加版權信息 #Date: 2017-8-01 22:50 #Author: yang qiang wei #Mail: [email protected] #Funtion: This is delete ... #version: 1.0 ...
  • 原文發表於cu:2016-03-29 參考文檔: 一.環境 1. 拓撲示意 2. 環境 Client:Win7 x86_64, 10.19.1.200 Server:CentOS6.7 x86_64,eth0 10.19.1.100,eth0 172.16.1.100 Intranet:172.16 ...
  • 當我們衡量IO負載時,常常會用到await util這兩個指標。那麼磁碟分成分區,分區又組成vg後分給 lvm。他們之間await util的統計有什麼關係呢? ...
  • 1.首先輸入用戶名和密碼進行登錄 2.升級更新軟體包 sudo apt-get update sudo apt-get upgrade 判斷都填y 3.安裝nginx sudo apt-get install nginx 在瀏覽器輸入你的ip地址測試是否安裝成功 4.安裝資料庫 sudo apt-g ...
  • PHPWind (簡稱:PW)的使命是讓網站更具價值,讓更多人從網路中享受便利,以提升生活品質。 phpwind是一個基於PHP和MySQL的開源社區程式,是國內最受歡迎的通用型論壇程式之一。phpwind第一個版本ofstar發佈於2004年。截止2013年12月phpwind項目品牌由阿裡雲計算 ...
  • LNMP編譯安裝之nginx安裝--圖文詳解 1、前言 本次安裝採用源碼安裝,主要資源包從官網下載,次要依賴則使用yum進行安裝,本篇只涉及nginx的安裝,不涉及nginx的配置,對應nginx如何訪問php,本篇也不涉及。該教程純屬安裝,不涉及任何重要知識點,老少皆宜。 2、安裝步驟 nginx ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...