欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux?sed工具的使用及工作原理

 更新時間:2022年07月12日 16:48:39   作者:背對背依靠  
這篇文章主要介紹了Linux?sed工具的使用,主要包括sed的基本用法及sed編輯器的高級用法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

基礎(chǔ)知識

- 行編輯工具: 一行一行處理文件內(nèi)容,例如:sed

- 全屏編輯工具:一次性將文件所有內(nèi)容加載到內(nèi)存中,例如:vi、vim、nano

sed編輯器: Stream Editor

工作原理:

逐行處理文件內(nèi)容,一次讀取一行內(nèi)容到模式空間處理。由此反復(fù),知道最后一行處理完成。

# 處理:可以是輸出到屏幕,也可以是文本的修改替換等操作
# 模式空間:就是一塊內(nèi)存空間

sed的基本用法

sed的命令格式

sed [option] 'script' [inputfile]

#script: sed自身的腳本,sed自身語法的一種腳本
#inputfile: 文件,如果不寫文件就對標(biāo)準(zhǔn)輸入的內(nèi)容進(jìn)行處理

sed實現(xiàn)自動打印功能(最基本用法)

sed '' filename

#''里面的腳本內(nèi)容不能省略
#不輸入腳本就是讀入什么就默認(rèn)打印什么 --- sed內(nèi)置了自動打印的功能

sed選項

-n:關(guān)閉sed的自動打印

-e:多點編輯(一次更改多個內(nèi)容)

-r,-E:使用正則表達(dá)式

-i.bak 先把文件做個備份然后再改

-s:將多個文件視為單獨的文件

sed的腳本格式

sed腳本:由位置(地址)和指令組合而成

sed腳本的地址格式

  • 空地址
  • 單地址
  • 地址范圍
  • 步進(jìn)
空地址:

表示對全文進(jìn)行處理

單地址:

表示處理指定的行。

#指定的行可以通過數(shù)字直接指定,也支持正則表達(dá)式匹配。
#寫正則表達(dá)式的格式:/pattern/
地址范圍:

(n,m):表示從n行開始,到m行結(jié)束這個范圍的內(nèi)容。

#地址范圍也可以使用正則表達(dá)式表示: /pat1/,/pat2/ (第一個正則表達(dá)式之后到下一個正則表達(dá)式中間的內(nèi)容)

sed腳本的指令

 p --- 內(nèi)容打印

 Ip --- 忽略大小寫輸出

 d --- 把模式空間內(nèi)容刪除掉,不再自動打印了

 a --- 再某些行后面加內(nèi)容

 i --- 再某些行前面加內(nèi)容

 c --- 替換某一行的內(nèi)容

 w --- file 另存為指定文件

 r --- 把一個文件內(nèi)容讀到當(dāng)前匹配到的行中

 = --- 某一行前面添加行號

 ! --- 除了某一行的意思

 q --- 結(jié)束或退出sed
 
#搜索替代
s/pattern/string/修飾符 --- 查找替換,支持使用其它分隔符

范例

#sed基本用法:自動打印
#查看某個文件的文本內(nèi)容
sed '' dir.sh

#打印指定行的內(nèi)容
sed -n '3p' /etc/passwd #需要使用-n關(guān)閉自動打印,因為如果使用了自動打印會輸出所有內(nèi)容,-p:打印匹配到的內(nèi)容

#打印出包含root的行
sed -n '/root/p' /etc/passwd

#打印從第三行到第六行的內(nèi)容:
sed -n '3,6p' /etc/passwd

#打印以r開頭到以g開頭的行的中間那些行 
sed -n '/^r/,/^g/p' /etc/passwd #找到了第一個滿足條件的范圍后不會停止,還會繼續(xù)往下面找。

#打印奇數(shù)行
sed -n '1~2p' /etc/passwd #從1開始,每次步進(jìn)2

sed工具的核心用法:搜索替代

#搜索替代的格式:
s/pattern/string/修飾符  #支持使用其它分隔符,可以是其它形式:s@@@,s###
s/模式/替代的字符串/修飾符

搜索替代的修飾符:

g --- 行內(nèi)全局替換
p --- 顯示替換成功的行
w --- /PATH/FILE 將替換成功的行保存至文件中
I,i --- 忽略大小寫

# &符號:待變前面搜索出來的內(nèi)容。 相當(dāng)于一個變量,保存搜索出來的內(nèi)容

正則表達(dá)式的分組(后項引用)

小括號實現(xiàn)分組,后面要表示第幾個分組的內(nèi)容就用 \num(第幾個小括號里面的內(nèi)容)  #分組實現(xiàn)把一個文件的一行切成多塊,保留其中之一

范例

#sed分組的實現(xiàn) --- 分組使用的是小括號(直接小括號是擴(kuò)展正則表達(dá)式,不加r參數(shù)用的是基本正則表達(dá)式)
echo abc123xyz | sed -r 's/(abc)(123)(xyz)/\1/' #輸出abc 值留下了第一個分組
#搜索替換和& --給前面特定的內(nèi)容后面加內(nèi)容
sed -nr 's/r..t/&er/gp' /etc/passwd #給搜索到的內(nèi)容加上er結(jié)尾
#獲取分區(qū)利用率

#獲取指定網(wǎng)卡的ip地址:
ifconfig ens33 | sed -nr '2s/.*inet ([0-9.]+) .*/\1/p'
#行首一直到inet 中間空格
#一個以上的數(shù)字或點 空格 一直到結(jié)尾

ifconfig ens33 | sed -rn '2s/(.*inet )([0-9].*)(netmask.*)/\2/p'
#行首一直到inet,中間空格
#數(shù)字
#取基名和目錄名
echo "/etc/netplan/01-netcfg" | sed -nr 's#.*\/([^/]+)#\1#p'  #結(jié)果為 01-netcfg
#從任意字符開始到以斜杠結(jié)尾,然后以非斜杠開頭的內(nèi)容
#使用sed將selinux改為disabled
sed -r -i.bak '/^SELINUX=/s/(SELINUX=).*/\1disabled/' /etc/selinux/config
# 取文件的前綴和后綴
echo a.b.c.tar | sed -nr 's/(.*)\.([^.]+)$/\2/p'
#將非#開頭的行加#
sed -rn 's/^[^#]/#&/p' /etc/fstab 
或
#sed -rn 's/^[^#](.*)/#\1/p' /etc/fstab

#將#開頭的行刪除#
#sed -ri.bak '/^#/s/^#//' /etc/fstab

#刪除指定的行
cat /etc/passwd | sed '/tom/d' #刪除含有root的行
cat /etc/passwd | sed '4-10d' #刪除第四行到第十行的內(nèi)容

sed編輯器的高級用法

相關(guān)概念

模式空間:pattern space,存放sed需要處理哪一行數(shù)據(jù)(一個緩沖區(qū))

保持空間:Hold Space,臨時存放模式空間中的數(shù)據(jù)(一個臨時空間)

和兩個空間相關(guān)的指令

#模式空間內(nèi)容-->保持空間 小寫覆蓋,大寫追加
h 模式空間的內(nèi)容覆蓋到保持空間
H 模式空間的內(nèi)容追加到保持空間(內(nèi)容追加)

#保持空間內(nèi)容--->模式空間
g 保持空間數(shù)據(jù)覆蓋模式空間
G 保持空間內(nèi)容追加模式空間

#內(nèi)容互換
x 兩者內(nèi)容互換

#匹配到的下一行內(nèi)容--->模式空間
n 匹配行的下一行覆蓋至模式空間
N 匹配行的下一行追加至模式空間

#刪除
d 清空模式空間
D 刪除模式空間第一行

sed命令使用變量

#因為sed的腳本使用單引號括起來的,單引號屬于強(qiáng)引用。所見即所得。
#例如:打印含有root的行
name=root
cat /etc/passwd | sed -nr "/$name/p" #如果里面的內(nèi)容本來就帶雙引號的,所以就不能再在外面使用雙引號。
解決方法;cat /etc/passwd | sed -nr '/'$name'/p' #再加一個單引號把變量括起來 把'/'和'/p'成對了,變量空出來了
#多點編輯并調(diào)用變量
#使用變量的方式修改httpd的配置文件 servername和port 
cat /etc/httpd/conf/httpd.conf | sed -nr -e  's/^(Listen) 80/\1 '$port'/p' -re "/#ServerName /c ServerName= `hostname`:$port/p"
#或者:
cat /etc/httpd/conf/httpd.conf | sed -nr -e  's/^(Listen) 80/\1 '$port'/p' -re '/#ServerName /c ServerName= '$(hostname)':'$port'/p' # $(command)
#把包含ServerName的這一行替換成: ServerName: 主機(jī)名:端口

范例

#sed實現(xiàn)修改默認(rèn)的網(wǎng)卡名
 cat /etc/default/grub | sed -nr 's/^(GRUB_CMDLINE_LINUX=.*)"$/\1  net.ifnames=0"/p'
#打印偶數(shù)行
seq 10 | sed -n 'n;p' #n:讀取到的行的下一行 
#比如首先讀取到的是第一行,因為有n,所以就以讀到的內(nèi)容的下一行內(nèi)容覆蓋當(dāng)前讀到的內(nèi)容到模式空間,所以第一次輸出2.

seq 10 | sed -n '2~2p' #使用步進(jìn)的方式實現(xiàn)

seq 10 | sed -n '1~2!p' #!表示除了這些行,其他的都打印

到此這篇關(guān)于Linux sed工具的使用的文章就介紹到這了,更多相關(guān)Linux sed工具內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Bash技巧:把變量賦值為換行符(判斷文件是否以換行符結(jié)尾)

    Bash技巧:把變量賦值為換行符(判斷文件是否以換行符結(jié)尾)

    這篇文章主要介紹了Bash技巧:把變量賦值為換行符,判斷文件是否以換行符結(jié)尾,需要的朋友可以參考下
    2020-08-08
  • shell命令while循環(huán)中使用sleep命令代碼示例

    shell命令while循環(huán)中使用sleep命令代碼示例

    這篇文章主要介紹了shell命令while循環(huán)中使用sleep命令代碼示例,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Linux shell條件判斷if中的-a到-z的意思【推薦】

    Linux shell條件判斷if中的-a到-z的意思【推薦】

    這篇文章主要介紹了Linux shell條件判斷if中的-a到-z的意思,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • shell腳本查看k8s日志介紹

    shell腳本查看k8s日志介紹

    大家好,本篇文章主要講的是shell腳本查看k8s日志介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Linux下date命令,格式化輸出,時間設(shè)置方法

    Linux下date命令,格式化輸出,時間設(shè)置方法

    下面小編就為大家?guī)硪黄狶inux下date命令,格式化輸出,時間設(shè)置方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • bash shell命令行選項與修傳入?yún)?shù)處理

    bash shell命令行選項與修傳入?yún)?shù)處理

    本文介紹了bash shell命令行參數(shù)與命令行選項的操作方法,有關(guān)shell 命令行參數(shù)的實例教程,有需要的朋友參考下。
    2014-04-04
  • Shell 字符串拼接的實現(xiàn)示例

    Shell 字符串拼接的實現(xiàn)示例

    這篇文章主要介紹了Shell 字符串拼接的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • shell命令之mv的具體使用

    shell命令之mv的具體使用

    本文主要介紹了shell命令之mv的具體使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • bash提取字符串${string:position:length}的具體使用

    bash提取字符串${string:position:length}的具體使用

    本文主要介紹了bash提取字符串${string:position:length}的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 詳解shell腳本[] [[]] -n -z 的含義解析

    詳解shell腳本[] [[]] -n -z 的含義解析

    這篇文章主要介紹了詳解shell腳本[] [[]] -n -z 的含義解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評論