色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux三劍客之Sed:文本處理神器

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2024-12-16 15:58 ? 次閱讀

關于linux三劍客

  • grep,過濾關鍵字信息數據。主要是用于查文本內的數據

  • sed ,對文本數據進行編輯,修改原文件內容

  • awk,對文件數據過濾,提取,并且能實現,格式化輸出

    • awk對文件數據處理后,還能更美觀的展示數據

sed是什么

  • sed軟件本身

  • sed提供的加工的命令

  • 給sed提供的源數據
    828eb252-b6dd-11ef-93f3-92fbcf53809c.png

sed語法格式

sed [選項] [sed內置命令字符] [輸入文件]

說明:
1.注意 sed 軟件及后面選項,sed 命令和輸入文件,每個元素之間都至少有一個空格

2.為了避免混淆,文本稱呼sed為sed軟件.sed-commands(sed命令)是sed軟件內置的一些命令選項,為了和前面的 options(選項)區分,故稱為sed命令.

3.sed-commands 既可以是單個sed 命令,也可以是多個sed命令組合.

4.input-file(輸入文件)是可選項,sed 還能夠從標準輸入或管道獲取輸入
語法
sed替換字符數據
s替換指令
#替換前的數據(正則)#替換后的數據#

sed   's#替換前的數據#替換后的數據#'   file.txt

sed命令執行過程

概括流程:
sed 軟件從文件或管道讀取一行,處理一行,輸出一行;再讀取一行.再處理一行.在輸出一行....

82a2a6b8-b6dd-11ef-93f3-92fbcf53809c.png

sed參數

sed默認修改的是模式空間內的數據
(簡單大白話,sed讀取了一行文本數據,放入到內存里進行修改,修改的結果默認不會寫入到文件中,只是在內存里修改,且打印讓你看到修改的結果)
吧修改的結果寫入到文件

就得借助參數的功能
-i 把sed處理的結果,寫入到文件,且不在終端打印了
sed -i  's#替換前的數據#替換后的數據#'   file.txt
options[選項]
解釋說明
-n    取消默認的 sed 軟件的輸出,常與 sed 命令的 p 連用
-e    一行命令語句可以執行多條 sed 命令
-f    選項后面可以接 sed 腳本的文件名
-r    使用正則拓展表達式,默認情況 sed 只識別基本正則表達式
-i    直接修改文件內容,而不是輸出終端,如果不使用-i 選項 sed 軟件只是修改在 內存中的數據,并不影響磁盤上的文件

sed命令

sed提供了很多功能的指令
在某一行插入數據
替換字符數據

sed-commands[sed 命令]
解釋說明
a 追加,在指定行后添加一行或多行文本
c 取代指定的行
d 刪除指定的行
D 刪除模式空間的部分內容,直到遇到換行符
 結束操作,與多行模式相關
i 插入,在指定的行前添加一行或多行文本
h 把模式空間的內容復制到保持空間
H 把模式空間的內容追加到保持空間
g 把保持空間的內容復制到模式空間
G 把保持空間的內容追加到模式空間
x 交換模式空間和保持空間的內容
l 打印不可見的字符
n 清空模式空間,并讀取下一行數據并追加到模式空間
N 不清空模式空間,并讀取下一行數據并追加到模式空間
p 打印模式空間的內容,通常 p 會與選項-n 一起使用
P(大寫) 打印模式空間的內容,直到遇到換行符你結束操作
q 退出 sed
r 從指定文件讀取數據
s 取代,s#old#new#g==>這里 g 是 s 命令的替代標志,注意和 g 命令區分
w 另存,把模式空間的內容保存到文件中
y 根據對應位置轉換字符
:label  定義一個標簽
t 如果前面的命令執行成功,那么就跳轉到 t 指定的標簽處,繼續往下執行后 續命令,否則,仍然繼續正常的執行流程

sed匹配文本范圍

82b39c8e-b6dd-11ef-93f3-92fbcf53809c.png

sed的修改字符與取消默認輸出

82c1b5e4-b6dd-11ef-93f3-92fbcf53809c.png

sed增刪改查(練習) 練習期間,別用-i參數,去修改源文件,直接看替換結果

sed增加字符命令

"a":追加文本到指定行,記憶方法:a 的全拼是 apend,,意思是追加    添加一行或多行文本

3a 表示在第三行下面追加數據

"i":插入文本到指定行前,記憶方法:i 的全拼是 insert,意思是插入   添加一行或多行文本

3i 在第三行上面插入數據

單行增加命令

sed '行號 sed指令 你想添加的字符數據' 源文件
在文件第二行后,插入數據,"今天又是美好的一天"

[242-yuchao-class01 root ~]#sed  '2 a  "今天又是美好的一天" '  t1.log
My name is yuchao.
I teach linux.
"今天又是美好的一天" 
I like play computer game.
My qq is 877348180.
My website is http://www.yuchaoit.cn

在第二行前,插入數據

sed '2 i  今天霧霾比較大'  t1.log

sed多行增加

增加的數據存在換行

cat實現多行文本追加

cat >>my.log<<EOF
你好
我好
他也好
EOF

echo 追加多行數據

用法如下
[242-yuchao-class01 root ~]#echo -e "hello
world
你好
我也好" > hello.log
[242-yuchao-class01 root ~]#cat hello.log 
hello
world
你好
我也好

sed追加多行文本

cat、還是echo,都只能往文件末尾追加內容。

而sed是按行處理文本,可以指定要處理的行,也就是在指定行插入字符數據。

使用 添加多行數據

給t1.log 開頭,添加兩行數據
加油
奧力給

[242-yuchao-class01 root ~]#sed -i '1 i 加油
奧力給'  t1.log
[242-yuchao-class01 root ~]#cat -n t1.log 
     1加油
     2奧力給
     3My name is yuchao.
     4I teach linux.
     5I like play computer game.
     6My qq is 877348180.
     7My website is http://www.yuchaoit.cn

練習sed追加配置文件信息(單行)

1.練習,修改nginx配置文件,在第39行插入新數據 listen 81;

只修改,且終端上看到修改結果,但是不修改文件
sed '39 i listen 81;'  /etc/nginx/nginx.conf

sed -i '39 i listen 81;'  /etc/nginx/nginx.conf

修改sshd_config實戰
例如我們在系統初始化優化時,需要修改sshd服務端設置,需要加入如下多行配置

Port 25515                                   # 改端口
PermitRootLogin no                   # 不允許root登錄
PerminEmptyPasswords no         # 不允許空密碼
UseDNS no                                    # 不做主機名解析,加速ssh連接
GSSAPIAuthentication no            # 不做主機名解析,加速ssh連接

修改配置之前先備份源文件

源文件 /etc/ssh/sshd_config
備份,添加ori后綴

cp /etc/ssh/sshd_config{,.ori}

sed寫入多行配置 在開頭加入這些配置

sed -i '1 i Port 25515
PermitRootLogin no
PerminEmptyPasswords no
UseDNS no
GSSAPIAuthentication no'   /etc/ssh/sshd_config

sed刪除字符數據

d 刪除指定的行
d 命令,表示刪除字符,delete意思

sed默認是多行處理所有文本,如果不指定范圍,sed默認是刪除所有文本行數據了

sed 刪除第二行數據

[242-yuchao-class01 root ~]#sed '2 d' t1.log

sed刪除1到4行

sed '1,4d' t1.log

關于sed處理文件行范圍語法

82d65ddc-b6dd-11ef-93f3-92fbcf53809c.png

刪除第三行數據
sed '3 d'  t1.log
刪除文件的36行
sed '3,6 d' t1.log

刪除第三行開始,向下2行
sed '3,+2 d'  t1.log

刪除奇數行 1,3,5,7,9

sed '1~2 d' t1.log

刪除偶數行 2,4,6,8
sed '2~2 d' t1.log

保留前三行
[242-yuchao-class01 root ~]#sed -e  '4,$  d'  t1.log 


找到game那一行,且刪掉
[242-yuchao-class01 root ~]#sed '/game/ d' t1.log


刪除game這一行到結尾
[242-yuchao-class01 root ~]#sed '/game/,$ d'  t1.log 


刪除文件中所有包含game的行,以及它下一行
[242-yuchao-class01 root ~]#sed '/game/,+1 d' t1.log 

打印行范圍練習

sed提供打印的命令是p
82ecdbd4-b6dd-11ef-93f3-92fbcf53809c.png

sed刪除命令練習

元數據

[yuchao-linux01 root ~]#cat chaoge.log
My name is yuchao.
I teach linux.
I like play computer game.
My qq is 877348180.
My website is http://www.yuchaoit.cn

刪除文件所有行

sed不指定行號的話,默認匹配所有行,執行d刪除命令

sed '行號 d命令' 文件
sed 'd' file

刪除文件第2行

sed '2 d' file

刪除1到3行

sed '1,3 d'

刪除第1、2、4行
語法是用分號,隔開多個命令,多次刪除

sed '1 d;2 d;4d;' t1.log

刪除game的行

sed '/game/d' t1.log

刪除game和http的行
也就是刪除了2個指定的行

sed '/game/d;/http/d' t1.log

刪除My開頭的行

sed '/^My/d' t1.log

sed忽略大小寫的指令
sed提供了 大寫的I 指令 用于忽略大小寫

sed '/^My/Id' t1.log

刪除以.結尾的行

sed '/.$/d' t1.log

刪除第二行到qq的行

sed '2,7d' t1.log
sed '2,/qq/d' t1.log

刪除2和5兩行

sed '2d;5d' t1.log

刪除2到5行

sed '2,5d' t1.log

刪除3到尾行

sed '3,$d' t1.log

刪除偶數行(步長)

seq 1 10 | sed '2~2d'

刪除奇數行(步長)

seq 1 10 | sed '1~2 d'

感嘆號取反

Id sed的忽略大小寫命令
!d 結果取反

除了有字符yuchao的行,其他都刪除

[242-yuchao-class01 root ~]#sed '/yuchao/!d' t1.log 
My name is yuchao.
My website is http://www.yuchaoit.cn

刪掉除了My開頭的行

sed '/^My/!d' t1.log

sed修改數據

替換整行命令(c)

c    把選定的行改為新的文本。

把11行替換為新數據 ,  睡醒了 精神很飽滿
語法
sed ' 11 c   睡醒了,精神很飽滿  ' t1.log

替換文件的第二行,改為 "I love linux , python !"

整行全部替換
sed '2c  I love linux , python !' t1.log

替換字符(s命令)

sed替換的命令解釋
這個分隔符,常見有如下形式
sed 's/old_string/new_string/'
sed 's#old_string#new_string#'
sed 's@old_string@new_string@'

強烈建議用# 
sed 's#old_string#new_string#'


替換一次
sed 's/替換前字符/替換后字符/' file

全局替換,global 全局替換
sed 's/替換前字符/替換后字符/g' file

s 將每一行第一處匹配的字符替換 
s/old_string/new_string/

sed 's#i#I#'  t1.log


g 全局替換global,每一行,每一處匹配的字符都替換  s/old_string/new_string/

sed 's#i#I#g'  t1.log

sed 's/i/I/g'  t1.log


-i 選項、參數,直接修改文件

sed默認是修改內存中的模式空間數據,不會修改源文件,使用-i會修改源文件,修改磁盤上的文件數據。

測試數據

My name is yuchao. you can call me yuchao.
I teach linux.
I like play computer game.
My qq is 877348180.
My website is http://www.yuchaoit.cn , and another website is https://www.yuchao.top/

字符yuchao改為老于
替換一次

[242-yuchao-class01 root ~]#sed 's#yuchao#老于#' t1.log 
My name is 老于. you can call me yuchao.
I teach linux.
I like play computer game.
My qq is 877348180.
My website is http://www.老于it.cn , and another website is https://www.yuchao.top/

替換多次,全局替換

sed 's#yuchao#老于#g' t1.log 

替換第三行的computer改為linux

sed '3 s#computer#linux#g' t1.log

所有的My改為His
指定my開頭

注意,sed提供了忽略大小寫的命令,大寫的 I
注意大小寫

不加忽略大小寫命令的寫法
sed 's#^My#His#'  t1.log

添加忽略大小寫的命令
sed 's#my#His#Ig'  t1.log
new_name="彭于晏"

注意單引號、雙引號的對變量的解析作用
[242-yuchao-class01 root ~]#sed "s#yuchao#$new_name#g"  t1.log

sed分組替換

注意別忘了擴展正則 -r參數

語法:
sed軟件也提供了 ()分組功能
使用1引用第一個括號的數據
2引用第二個括號的數據
sed最多記住9個分組

() 1向后引用分組數據

提取出welcome這個單詞

echo 'I am teacher yuchao,welcome my linux course' | sed -r 's/^.*,(.*)m.*/1/g'
welcome

分組取出ip

s 表示單個空格

去頭去尾法
[242-yuchao-class01 root ~]#ifconfig ens33 | sed -e '2s/^.*inet//' -e '2s/netmask.*//p' -n 
 192.168.0.242  

分組提取法
82f70014-b6dd-11ef-93f3-92fbcf53809c.png

sed查詢

sed打印命令p 打印sed正則處理后的數據

并且sed默認打印模式空間,可以用-n取消

文本,10數據 > sed 一行一行的讀取,編輯 >> 打印

固定用法,只要使用到了p打印些數據,就是想輸出指定數據
必然用-n取消默認打印,目的是,只看到你想p打印的那些數據

打印第二行

sed '2 p ' t1.log

打印前三行

sed '1,3p' t1.log -n

只顯示qq號那一行

[242-yuchao-class01 root ~]#sed -r '/[0-9]{9}/p' t1.log -n
My qq is 877348180. my num is 1555555555.

找出http和linux的行

-e 多次編輯
[242-yuchao-class01 root ~]#sed -e '/http/p'  -e '/linux/p' t1.log -n
I teach linux.
My website is http://www.yuchaoit.cn , and another website is https://www.yuchao.top/

[242-yuchao-class01 root ~]#sed '/http/p;/linux/p' -n t1.log 
I teach linux.
My website is http://www.yuchaoit.cn , and another website is https://www.yuchao.top/

sed其他命令

w命令

作用是將sed操作結果,寫入到指定文件

sed '/模式/w new_file' old_file

必須,找出computer這一行,數據寫入到game2.log文件中
sed '/computer/w  game2.log' t1.log  -n

替換文件中所有的yuchao為老于,新數據寫入 yu.log

sed 's#yuchao#老于#gw yu.log' t1.log -n

-e選項

-e選項用于接上sed多個命令
提取1,2,4行信息

語法
sed -e 'sed命令' -e 'sed命令'  -e 'sed命令'

sed -e '1p' -e '2p'  -e '4p' t1.log -n

; 分號

分號也用于執行多條命令,和linux基礎命令一樣支持這種寫法。

單獨提取出1,2,4行信息

sed '1p;2p;4p' t1.log -n
sed -e '1p' -e '2p' -e '4p' t1.log -n


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11292

    瀏覽量

    209323
  • SED
    SED
    +關注

    關注

    0

    文章

    25

    瀏覽量

    27085

原文標題:Linux三劍客之Sed:文本處理神器,一分鐘掌握核心技能!

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux中grep、sed和awk命令詳解

    今天給大家聊一聊Linux文本操作的`三劍客:awk、grep、sed`,因其功能強大、使用頻繁,且是Linux
    發表于 04-26 17:20 ?3239次閱讀
    <b class='flag-5'>Linux</b>中grep、<b class='flag-5'>sed</b>和awk命令詳解

    Linuxsed命令用法

    這篇文章為初學者提供了關于 Linuxsed 命令的全面指南,涵蓋了其歷史、用途以及一些實用的技巧和竅門。通過掌握 sed,您可以高效處理文本
    發表于 07-21 10:38 ?355次閱讀
    <b class='flag-5'>Linux</b>中<b class='flag-5'>sed</b>命令用法

    使用 Linux/Unix 進行文本處理

    使用 Linux/Unix 進行文本處理正則表達式 翻譯領域不乏讓人摸不著頭腦的詞匯,比如"句柄"、"套接字"、"魯棒性"。當然
    發表于 11-24 15:39

    shell文本處理方法是什么

    shell文本處理三劍客—grep
    發表于 05-27 12:32

    嵌入式Linux系統知識架構

    嵌入式Linux系統知識架構及層次嵌入式Linux系統構成及啟動略析嵌入式Linux三劍客uboot技術嵌入式
    發表于 10-27 07:22

    3ds max7渲染傳奇三劍客-VRay教程

    3ds max7渲染傳奇三劍客-VRay教程
    發表于 09-07 17:14 ?0次下載
    3ds max7渲染傳奇<b class='flag-5'>三劍客</b>-VRay教程

    鋰離子正極三劍客之一:鈷酸鋰

    鋰離子正極三劍客之一:鈷酸鋰 1,LiCoO2的一種合成方法    &nbs
    發表于 11-04 14:09 ?1327次閱讀

    鋰離子正極三劍客之一:錳酸鋰

    鋰離子正極三劍客之一:錳酸鋰 顆粒大小和形貌、粒度分布、比表面積、振實密度以及電極加工性能、
    發表于 11-04 14:33 ?1264次閱讀

    易語言-文本處理

    易語言是一門以中文作為程序代碼編程語言學習例程:易語言-文本處理
    發表于 06-06 17:43 ?1次下載

    Linux Awk用法總結

    Awk、sed與grep,俗稱Linux下的三劍客,它們之間有很多相似點,但是同樣也各有各的特色,相似的地方是它們都可以匹配文本,其中sed
    的頭像 發表于 04-13 09:27 ?5584次閱讀
    <b class='flag-5'>Linux</b> Awk用法總結

    Redmi Note 9 Pro系列三劍客正式亮相

    11月26日晚,Redmi召開Note 9系列新品發布會,帶來了Note 9三劍客,分別是Note 9 4G版、Note 9、Note 9 Pro。
    的頭像 發表于 11-27 09:56 ?1971次閱讀

    關于Linux中的sed簡易介紹與工作原理

    熟悉 Linux 的同學一定知道大名鼎鼎的 Linux 三劍客,它們是 grep、awk、sed,我們今天要聊的主角就是 sed
    的頭像 發表于 03-26 15:35 ?2260次閱讀
    關于<b class='flag-5'>Linux</b>中的<b class='flag-5'>sed</b>簡易介紹與工作原理

    【嵌入式】構建嵌入式Linux系統(uboot、內核、文件系統)

    嵌入式Linux系統知識架構及層次嵌入式Linux系統構成及啟動略析嵌入式Linux三劍客uboot技術嵌入式
    發表于 10-20 18:20 ?42次下載
    【嵌入式】構建嵌入式<b class='flag-5'>Linux</b>系統(uboot、內核、文件系統)

    單日獲成本超20萬,國產大模型開卷200萬字以上的長文本處理

    更精準的推理和高并發流量以外,似乎已經沒有太多值得廠商大肆宣傳的特性了,直到最近超長文本處理的爆火。 ? 國產大模型的新卷法,長文本處理 ? 當下將大模型長文本處理炒熱的,無疑是來自月
    的頭像 發表于 03-27 00:53 ?3362次閱讀
    單日獲<b class='flag-5'>客</b>成本超20萬,國產大模型開卷200萬字以上的長<b class='flag-5'>文本處理</b>

    如何掌握Linux文本處理

    /from/sed_script: 從指定的文本中讀取處理腳本 -r: 使用擴展正則表達式 sed命令選項 替換標記 g:表示行內全面替換 w:表示把行寫入一個文件 x:表示互換模式
    的頭像 發表于 11-10 13:40 ?160次閱讀
    主站蜘蛛池模板: 日本特交大片免费观看| 内射少妇36P亚洲区| 女人被躁到高潮嗷嗷叫69| 三级黄色网| 亚洲乱码在线卡一卡二卡新区| 中文字幕一区中文亚洲| 纯肉宠文高h一对一| 精品久久久亚洲精品中文字幕| 乱淫67194| 推倒美女总裁啪啪| 最新国产亚洲亚洲精品视频| 国产精品久久久久影院| 妹妹我要操| 亚洲视频在线观看免费| xxx免费观看| 麻豆精品一区二正一三区| 翁用力的抽插| www.一级毛片| 老板揉搓秘书丰满大乳| 性欧美video另类hd高清| qq快播电影网| 久久婷婷五月综合色情| 无限资源在线观看8| YY600800新视觉理论私人| 久久精品中文字幕免费| 午夜国产一区在线观看| 99久久国产露脸精品麻豆| 久久大香线蕉综合爱| 亚洲 日韩 自拍 视频一区| 哒哒哒影院在线观看免费高清| 乱子伦在线观看中文字幕| 一级毛片免费在线播放| 国产最新进精品视频| 午夜视频在线网站| 国产成人综合视频| 色久久久综合88一本道| 99无码熟妇丰满人妻啪啪 | 国产盗摄一区二区| 熟女强奷系列中文字幕| 工口肉肉彩色不遮挡| 热久久伊大人香蕉网老师|