国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Sed命令詳解

這篇具有很好參考價值的文章主要介紹了Sed命令詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Sed進階用法


一、sed命令介紹

sed 是 stream editor 的縮寫,中文稱之為“流編輯器”。

sed 命令是一個面向行處理的工具,它以“行”為處理單位,針對每一行進行處理,處理后的結(jié)果會輸出到標準輸出(STDOUT)。你會發(fā)現(xiàn) sed 命令是很懂禮貌的一個命令,它不會對讀取的文件做任何貿(mào)然的修改(除非加上-i選項),而是將內(nèi)容都輸出到標準輸出中。

  • sed命令的語法:sed command file

    • command 部分:針對每行的內(nèi)容所要進行的處理(這部分很重要很重要)。
    • file 部分:要處理的文件,如果忽略 file 參數(shù),則 sed 會把標準輸入作為處理對象。
  • sed命令的選項與參數(shù):

-n : 使用靜默模式,在一般的sed的用法中,所有來自stdin(標準輸出)的數(shù)據(jù)一般都會被列出到屏幕上。
     但如果加上-n參數(shù)后,則只要經(jīng)過sed特殊處理的那行才會被列出來。
-e : 直接在命令行模式上進行sed的操作編輯
-f : 直接將sed的操作寫在一個文件內(nèi),-f filename則可以執(zhí)行filename內(nèi)的sed操作
-r : 使用擴展正則表達式的語法
-i : 直接修改文件內(nèi)容,而不是輸出到屏幕上
command說明:[n1][,n2] action
n1,n2 : 一般代表【選擇進行操作(action)的行數(shù)】,舉例:如果我的操作是需要在
        5行到20行之間進行的,則【5,20[action]】。
action的參數(shù):
單行模式空間
a : 新增。a的后面接字符,而這些字符會在新增到下一行
i : 插入。i的后面接字符,而這些字符會在新增到上一行
c : 替換。c的后面接字符,這些字符替換n1到n2的行
d : 刪除。因為是刪除,所以d后面通常不接任何東西
p : 打印。將匹配的數(shù)據(jù)打印出來。通常p會與選項-n一起使用
s : 替換。將文件原內(nèi)容替換為新內(nèi)容。舉例:s/lod/new/g
n : 讀取匹配的數(shù)據(jù)的下一行,覆蓋模型空間的前一行(也就是被匹配的行),結(jié)果交給下一個參數(shù)處理
多行模式空間
N : 讀取匹配的數(shù)據(jù)的下一行追加到模式空間,同時將兩行看做一行,但是兩行之間依然含有\(zhòng)n換行符
P : 打印。打印模式空間開端至\n(換行)之間的內(nèi)容,并追加到默認輸出之前。
D : 如果模式空間包含換行符,則刪除模式空間開端至\n(換行)之間的內(nèi)容, 并不會讀取新的輸入行,
    而使用合成的模式空間重新啟動循環(huán)。如果模式空間不包含換行符,則會像發(fā)出d命令那樣啟動正常的新循環(huán)

替換標記
g 表示行內(nèi)全面替換。 
p 表示打印行。 
w 表示把行寫入一個文件。 
x 表示互換模板塊中的文本和緩沖區(qū)中的文本。 
y 表示把一個字符翻譯為另外的字符(但是不用于正則表達式)
\\1 子串匹配標記
& 已匹配字符串標記

其它
! 表示后面的命令對所有沒有被選定的行發(fā)生作用。 
= 打印當前行號碼。 
# 把注釋擴展到下一個換行符以前。 

二、sed 的工作原理與流程

工作原理:

sed 命令是面向“行”進行處理的,每一次處理一行內(nèi)容。處理時,sed 會把要處理的行存儲在緩沖區(qū)中,接著用 sed 命令處理緩沖區(qū)中的內(nèi)容,處理完成后,把緩沖區(qū)的內(nèi)容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。這個緩沖區(qū)被稱為“模式空間”(pattern space)。在這個處理過程中,sed 命令并不會對文件本身進行任何更改。

工作流程:

主要包括讀取、執(zhí)行和顯示三個過程。

  • 讀?。簊ed 從輸入流(文件、管道、標準輸入)中讀取一行內(nèi)容并存儲到臨時的緩沖區(qū)中(又稱模式空間,pattern space)。
  • 執(zhí)行:默認情況下,所有的 sed 命令都在模式空間中順序地執(zhí)行,除非指定了行的地址,否則 sed 命令將會在所有的行上依次執(zhí)行。
  • 顯示:發(fā)送修改后的內(nèi)容到輸出流。在發(fā)送數(shù)據(jù)后,模式空間將會被清空。在所有的文件內(nèi)容都被處理完成之前,上述過程將重復執(zhí)行,直至所有內(nèi)容被處理完。

2.1 模式空間與保持空間

**模式空間(pattern space):**sed處理文本內(nèi)容行的一個臨時緩沖區(qū),模式空間中的內(nèi)容會主動打印到標準輸出,并自動清空模式空間

**保持空間(hold space):**sed處理文本內(nèi)容行的另一個臨時緩沖區(qū),不同的是保持空間內(nèi)容不會主動清空,也不會主動打印到標準輸出,而是需要sed命令來進行處理

模式空間與保持空間的關(guān)系:

**模式空間:**相當于流水線,文本行在模式空間中進行處理;
**保持空間:**相當于倉庫,在模式空間對數(shù)據(jù)進行處理時,可以把數(shù)據(jù)臨時存儲到保持空間;作為模式空間的一個輔助臨時緩沖區(qū),但又是相互獨立,可以進行交互,命令可以尋址模式空間但是不能尋址保持空間??梢允褂酶呒壝頷,H,g,G與模式空間進行交互。

模式空間與保持空間進行交互:

d : 刪除模式空間的內(nèi)容,開始下一個循環(huán)
D : 刪除模式空間/n(換行符)前面的內(nèi)容

h : 【復制】模式空間的內(nèi)容至保持空間(會覆蓋保持空間的原內(nèi)容)
H : 把模式空間的內(nèi)容【追加】至保持空間

g : 【復制】保持空間的內(nèi)容至模式空間(會覆蓋模式空間的原內(nèi)容)
G : 把保持空間的內(nèi)容【追加】至模式空間

x : 【交換】模式空間與保持空間的內(nèi)容

三、sed命令演示

**注意!**以下的演示都未加-i,所以對實際文件內(nèi)容不產(chǎn)生任何效果。文章來源地址http://www.zghlxwxcb.cn/news/detail-641444.html

#使用sed命令對該文件進行演示
[root@localhost ~]# cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
=======================================
#用a參數(shù)在第一行的下面插入test
[root@localhost ~]# sed '1atest' passwd
root:x:0:0:root:/root:/bin/bash
test
bin:x:1:1:bin:/bin:/sbin/nologin

#用i參數(shù)在第二行的上面插入hello
[root@localhost ~]# sed '2ihello' passwd
root:x:0:0:root:/root:/bin/bash
hello
bin:x:1:1:bin:/bin:/sbin/nologin

#用c參數(shù)把第二行替換為hello
[root@localhost ~]# sed '2chello' passwd
root:x:0:0:root:/root:/bin/bash
hello

#用d參數(shù)刪除匹配到‘root’的行
[root@localhost ~]# sed '/root/d' passwd
bin:x:1:1:bin:/bin:/sbin/nologin

#單獨用s參數(shù)替換文件內(nèi)容只會替換該行匹配到的第一個
[root@localhost ~]# sed 's/root/tom/' passwd
tom:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
#s和g搭配使用可達到替換全部匹配到的效果
[root@localhost ~]# sed 's/root/tom/g' passwd
tom:x:0:0:tom:/tom:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

#單獨使用p參數(shù)可以看到不僅打印出匹配‘root’的行,還把原本內(nèi)容 \
#一起顯示出來了,這是因為sed的特性,文章開頭的一段話就說明了。
[root@localhost ~]# sed '/root/p' passwd
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
#通常p參數(shù)會搭配-n選項一起使用,-n是靜默模式
[root@localhost ~]# sed -n '/root/p' passwd
root:x:0:0:root:/root:/bin/bash

#使用y參數(shù)進行大小寫轉(zhuǎn)換
[root@localhost ~]# sed 'y/abdef/ABDEF/' test
A FriEnD is somEonE
with whom you
DArE to BE yoursElF.
[root@localhost ~]# sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' test
A FRIEND IS SOMEONE
WITH WHOM YOU
DARE TO BE YOURSELF.

#用n參數(shù)讀取當前行(匹配到的行)的下一行至模式空間,n參數(shù)會覆蓋模式空間的 \
#前一行(也就是含有'root'的行)。此時模式空間只有‘下一行’,后面的d參數(shù)會 \
#刪除模式空間的內(nèi)容,所以sed會打印出含有root的行
[root@localhost ~]# sed '/root/n;d' passwd
root:x:0:0:root:/root:/bin/bash


#在前面看到的都是單行模式。每次sed處理一個行。
#但是sed是允許一次處理多行的。加上N參數(shù)追加進模式空間,此時\
#sed將兩行看做一行,這就是所謂的多行模式空間。
#以下幾行是用于sed對多行模式空間進行操作練習的文件內(nèi)容
[root@localhost ~]# cat test
A friend is someone
with whom you
dare to be yourself.

#可以發(fā)現(xiàn)使用N參數(shù)沒有內(nèi)容被打印出來,是因為N參數(shù)讀取當前行的下一行至模式空間時\
#并不會覆蓋模式空間的上一行,此時模式空間‘當前行’與‘下一行’都存在,后面的d參數(shù)會\
#模式空間的內(nèi)容,所有沒有內(nèi)容被打印出來
[root@localhost ~]# sed '/root/N;d' passwd
[root@localhost ~]#
#使用N參數(shù)追加匹配到的行至模式空間,然后使用s參數(shù)進行替換,由于使用N參數(shù),原本\
#內(nèi)容的兩行此時在模式空間里被當作一行進行處理,把\n替換為空格后,由于中間沒有了\
#換行符,打印到屏幕上時會顯示為一行
[root@localhost ~]# sed '/A/{N;s/someone\n/someone /}' test
A friend is someone with whom you
dare to be yourself.
#對上條命令做了一點小小的修改。先說說這條命令要達成什么效果吧“把第二行的with挪到第一行”\
#這里的思路其實就是把換行符變動了位置,達到了把第二行的開頭挪到第一行的結(jié)尾的效果
[root@localhost ~]# sed '/A/{N;s/someone\nwith /someone with\n/}' test
A friend is someone with
whom you
dare to be yourself.

#咦?這里原本的第二行怎么不見了呢!來分析一下。首先把匹配的行讀入模式空間,后面的N參數(shù)\
#又把下一行追加至模式空間,此時模式空間有兩行內(nèi)容,但被看作一行,但這一行中間有\(zhòng)n,\
#P參數(shù)只打印模式空間開頭到\n之間的內(nèi)容,也就是說\n之后的內(nèi)容不會被打印出來
[root@localhost ~]# sed -n '/A/N;P' test
A friend is someone
dare to be yourself.

#D參數(shù)使用下面的文本作講解
[root@localhost ~]# cat sed_D
This is 1
This is 2
This is 3
This is 4
This is 5
#讀取1,執(zhí)行N,得出1\n2,執(zhí)行D,得出2
#執(zhí)行N,得出2\n3,執(zhí)行D,得出3
#依此類推,得出5,執(zhí)行N,條件失敗退出,因無-n參數(shù),故輸出5
[root@localhost ~]# sed 'N;D' sed_D
This is 5

#模式空間與保持的交互
#以下幾行用作下面練習的文件內(nèi)容
[root@localhost ~]# cat test
A friend is someone
with whom you
dare to be yourself.

#先匹配含有w的行,N參數(shù)把下一行也追加至模式空間,此時有模式有兩行內(nèi)容\
#h參數(shù)把模式空間的內(nèi)容復制到保持空間,之后d參數(shù)刪除模式空間的內(nèi)容\
[root@localhost ~]# sed '/w/{N;h;d}' test
A friend is someone

#
[root@localhost ~]# sed '/w/{N;h;d};/A/{N;s#is#the#g;G}' test
A friend the someone
with whom you

dare to be yourself.

到了這里,關(guān)于Sed命令詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • SED正則表達式中[方括號]的特殊處理

    今天被這個方括號懵暈了,特此記錄 例如: 去除輸入字符串“1[2.3]4[ab,c]”中的所有方括號和逗號: $ echo \\\"1[2.3]4[ab,c]\\\"|sed -e \\\"s/[,][]//g\\\" 1[2.3]4[ab,c] ? It doesn\\\'t work! 原因:Regular Expressions The right-square-bracket (?\\\']\\\'?) shall lose its special meaning and represent itself in a bracket expression if it oc

    2024年02月14日
    瀏覽(25)
  • sed中使用正則表達式進行替換以及注意事項

    sed中使用正則表達式進行替換的時候,一定要注意,有些特殊字符在使用時要轉(zhuǎn)義,目前發(fā)現(xiàn)的有: 用于分組的小括號:(),在使用時要用進行轉(zhuǎn)義,但是匹配字符串中真正的小括號時,無需轉(zhuǎn)義; 表示前面的表達式出現(xiàn)次數(shù)的{},也要轉(zhuǎn)義; 表示前面的表達式出現(xiàn)1次或多

    2023年04月22日
    瀏覽(24)
  • Linux學習之正則表達式元字符和grep命令

    Linux學習之正則表達式元字符和grep命令

    cat /etc/redhat-release 看到操作系統(tǒng)的版本是 CentOS Linux release 7.6.1810 (Core) , uname -r 可以看到內(nèi)核版本是 3.10.0-957.21.3.el7.x86_64 。 正則表達式是一種搜索字符串的模式,通俗點理解,也就是普通字符和元字符共同組成的字符集合匹配模式。正則表達式的主要作用是文本搜索和字符

    2024年02月14日
    瀏覽(20)
  • 【Linux命令行與Shell腳本編程】第十九章 正則表達式

    【Linux命令行與Shell腳本編程】第十九章 正則表達式

    正則表達式基礎(chǔ) 定義BRE模式 擴展正則表達式 在sed和gawk中創(chuàng)建正則表達式,以得到所需的數(shù)據(jù)。 正則表達式是一種可供Linux工具過濾文本的自定義模板,使用元字符來描述數(shù)據(jù)流中的一個或多個字符. Linux工具(比如sed或gawk)會在讀取數(shù)據(jù)時使用正則表達式對數(shù)據(jù)進行模式匹配

    2024年02月13日
    瀏覽(24)
  • Linux Shell 腳本編程學習之【第3章 正則表達式 (第二部分) grep命令】

    1、文本搜索工具 2、GREP 是Global search Regular Expression and Print out the line的簡稱,即全面搜索正則表達式并把行打印出來。 3、grep命令的模式十分靈活,可以是字符串,也可以是變量,還可以是正則表達式。模式中包含空格,則必須用雙引號括起來。 選 項 意 義 -c 只輸出匹配行

    2024年02月16日
    瀏覽(18)
  • 正則表達式詳解

    正則表達式(Regular Expression),通常簡稱為正則或正則表達式,是一種用于描述字符串模式的工具。它是由一系列字符和特殊字符組成的字符串,用于定義搜索模式或進行字符串匹配、替換、提取等操作。 正則表達式提供了一種靈活、強大且通用的方式來處理文本。它可以用

    2024年01月17日
    瀏覽(20)
  • 正則表達式學習詳解

    正則表達式(Regular Expression),通常簡稱為正則或正則表達式,是一種用于描述字符串模式的工具。它是由一系列字符和特殊字符組成的字符串,用于定義搜索模式或進行字符串匹配、替換、提取等操作。 正則表達式提供了一種靈活、強大且通用的方式來處理文本。它可以用

    2024年02月13日
    瀏覽(19)
  • 正則表達式 之 斷言詳解

    正則表達式 之 斷言詳解

    正則表達式的先行斷言和后行斷言一共有 4 種形式: (?=pattern)?零寬正向先行斷言(zero-width positive lookahead assertion) (?!pattern)?零寬負向先行斷言(zero-width negative lookahead assertion) (?=pattern)?零寬正向后行斷言(zero-width positive lookbehind assertion) (?!pattern)?零寬負向后行斷言(zero-width neg

    2024年02月11日
    瀏覽(19)
  • shell 正則表達式詳解

    shell 正則表達式詳解

    目錄 正則表達式 一,什么是正則表達式 二,為什么使用正則表達式 三,如何使用正則表達式 示例: 四,基本正則表達式 基本正則表達式示例: 正則表達式字符集示例: 五,擴展正則表達式 擴展正則表達式示例: 擴展: ? ? ? ?正則表達式是通過一些特殊字符的排列,

    2024年01月17日
    瀏覽(19)
  • linux 正則表達式

    linux 正則表達式

    目錄 一、正則表達式 二、元字符 三、次數(shù)符號 四、位置錨定 五、實驗 ? ? ? ? ? ? ? ? ? ? ? ? ? ? 一、正則表達式 通配符功能是用來處理文件名,而正則表達式是處理文本內(nèi)容中字符。 分類: 1.?基本正則表達式 2.擴展正則表達式 二、元字符 元字符: .?? 匹配任意單

    2024年02月07日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包