日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Shell脚本工具三剑客 Sed

發(fā)布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Shell脚本工具三剑客 Sed 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

文章目錄

  • 一、sed工具的概述
  • 二、sed工作流程
  • 三、sed的命令格式
    • 1.常用選項
    • 2.常用操作
  • 四、sed命令的使用
    • 1.打印內(nèi)容
    • 2.刪除內(nèi)容
    • 3.插入內(nèi)容
    • 4.取反
    • 5.搜索替代
    • 6.分組調(diào)用

一、sed工具的概述

sed是一種流編輯器流編輯器會在編輯器處理數(shù)據(jù)之前基于預先提供的一組規(guī)則來編輯數(shù)據(jù)流

sed編輯器可以根據(jù)命令來處理數(shù)據(jù)流中的數(shù)據(jù) 這些命令要么從命令行中輸入要么存儲在一個
命令文本文件中

二、sed工作流程

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

三、sed的命令格式

1.常用選項

-h 或- -help∶顯示幫助。
-r:使用擴展正則表達式
-i∶ 備份文件文件并原處編輯
-e 或 - -expression=∶ 多點編輯
-f 或- -file=∶表示用指定的腳本文件來處理輸入的文本文件。
-n∶ 不輸出模式空間內(nèi)容到屏幕,即不自動打印,加p,又恢復自動打印

2.常用操作

s∶替換,替換指定字符。
d∶刪除,刪除選定的行。
c∶ 替換,將選定行替換為指定內(nèi)容。
a∶ 增加,在當前行下面增加一行指定內(nèi)容。
i∶ 插入,在選定行上面插入一行指定內(nèi)容。
Y∶ 字符轉換,轉換前后的字符長度必須相同。
p∶ 打印,如果同時指定行,表示打印指定行;如果不指定行,則表示打印所有內(nèi)容; 如果有非打印字符,則以 AscII碼輸出。其通常與_n"選項一起使用。
=∶打印行號。
l(小寫L)∶打印數(shù)據(jù)流中的文本和不可打印的ASCII字符(比如結束符s、制表符\t)

四、sed命令的使用

1.打印內(nèi)容

打印全部內(nèi)容

sed ‘ ’交互模式輸入一行,自動打印一行相同的
sed -n ‘ ’ 交互模式輸入一行,關閉自動打印
sed -n ‘ p’加上p又恢復自動打印

[root@yxp opt]#sed ' ' 11 11 22 22 33 33 44 44 [root@yxp opt]#sed -n ' ' 11 22 33 [root@yxp opt]#sed -n ' p' 11 11 22 22 33 33

查看文件,打印全部內(nèi)容

#法一: [root@yxp opt]#sed ' ' /etc/fstab # # /etc/fstab # Created by anaconda on Sat Sep 4 02:48:23 2021 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=183ca7c7-1989-4f43-9e81-d2676192f5a4 /boot xfs defaults 0 0 /dev/mapper/centos-home /home xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 /dev/sdb1 /mnt xfs defaults 0 0#法二 [root@yxp opt]#sed -n ' p' /etc/fstab # # /etc/fstab # Created by anaconda on Sat Sep 4 02:48:23 2021 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=183ca7c7-1989-4f43-9e81-d2676192f5a4 /boot xfs defaults 0 0 /dev/mapper/centos-home /home xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 /dev/sdb1 /mnt xfs defaults 0 0

打印指定行內(nèi)容

##例如:打印第四行內(nèi)容 [root@yxp opt]#sed -n ' 4p' /etc/fstab # Created by anaconda on Sat Sep 4 02:48:23 2021[root@yxp opt]#ifconfig ens33|sed -n '2p'inet 192.168.59.102 netmask 255.255.255.0 broadcast 192.168.59.255

根據(jù)地址,打印指定多行內(nèi)容

#打印2-4[root@yxp opt]#ifconfig ens33|sed -n '2,4p'inet 192.168.59.102 netmask 255.255.255.0 broadcast 192.168.59.255inet6 fe80::ecee:9f8a:52de:5871 prefixlen 64 scopeid 0x20<link>ether 00:0c:29:3e:22:fe txqueuelen 1000 (Ethernet)#打印2行加4行,就是打印第二行到第6[root@yxp opt]#cat -n /etc/passwd|sed -n '2,+4p'2 bin:x:1:1:bin:/bin:/sbin/nologin3 daemon:x:2:2:daemon:/sbin:/sbin/nologin4 adm:x:3:4:adm:/var/adm:/sbin/nologin5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin6 sync:x:5:0:sync:/sbin:/bin/sync

打印多行后退出

[root@yxp opt]#sed '3q' /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin

打印最后一行,使用通配符$

[root@yxp opt]#sed -n '$p' /etc/passwd dhcpd:x:177:177:DHCP server:/:/sbin/nologin

支持正則表達式

#查找基本格式: sed -n '//,//p' 文件名 第一個//表示開頭位置,第二個//表示結尾位置[root@yxp opt]#sed -n '/^r/,/^f/p' /etc/passwd root:x:0:0:root:/root:/bin/bash 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 operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin setroubleshoot:x:995:993::/var/lib/setroubleshoot:/sbin/nologin rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin qemu:x:107:107:qemu user:/:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin radvd:x:75:75:radvd user:/:/sbin/nologin chrony:x:994:990::/var/lib/chrony:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin geoclue:x:993:988:User for geoclue:/var/lib/geoclue:/sbin/nologin sssd:x:992:987:User for sssd:/:/sbin/nologin gdm:x:42:42::/var/lib/gdm:/sbin/nologin rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin gnome-initial-setup:x:991:986::/run/gnome-initial-setup/:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin yxp:x:1000:1000:yxp:/home/yxp:/bin/bash dhcpd:x:177:177:DHCP server:/:/sbin/nologin

過濾關鍵字

[root@yxp opt]#sed -n '/root/p' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin

‘#,/關鍵字/p’ 從第#行開始匹配

[root@yxp opt]#sed -n '2,/root/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 operator:x:11:0:operator:/root:/sbin/nologin

‘/關鍵字/,#’ 找到第#個關鍵字為止

[root@yxp opt]#sed -n '/root/,3p' /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin

打印文本的奇數(shù)和偶數(shù)行

[root@yxp opt]#seq 10 |sed -n '1~2p' 1 3 5 7 9 [root@yxp opt]#seq 10 |sed -n '2~2p' 2 4 6 8 10 [root@yxp opt]#seq 10 |sed '1~2d' 2 4 6 8 10 [root@yxp opt]#seq 10 |sed '2~2d' 1 3 5 7 9

2.刪除內(nèi)容

刪除指定行

#刪除指定行并不是真正刪除,只是將刪除了的結果顯示出來,并不是真正刪除了 [root@yxp opt]#cat seq.txt 1 2 3 4 5 6 7 8 9 10 [root@yxp opt]#cat seq.txt |sed '3d' 1 2 4 5 6 7 8 9 10 [root@yxp opt]#cat seq.txt 1 2 3 4 5 6 7 8 9 10

刪除指定的多行

[root@yxp opt]#sed '2,4d' seq.txt 1 5 6 7 8 9 10

刪除文本中的空行

[root@yxp ~]#sed '/^$/d' /opt/seq.txt 1 2 3 4 5 6 7 8 9 10 [root@yxp ~]#

刪除以指定字符結尾的行及取反

[root@yxp ~]#sed '/nologin$/!d' /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 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin

先備份內(nèi)容再刪除

[root@yxp opt]#sed -i.bak '3d' seq.txt [root@yxp opt]#cat seq.txt 1 2 4 5 6 7 8 9 10 [root@yxp opt]#cat seq.txt.bak 1 2 3 4 5 6 7 8 9 10

3.插入內(nèi)容

在指定行后插入

[root@yxp opt]#cat seq.txt 1 2 4 5 6 7 8 9 10 [root@yxp opt]#sed -i '2a hehe' seq.txt [root@yxp opt]#cat seq.txt 1 2 hehe 4 5 6 7 8 9 10

插入空行,修改文件的換行,要多加一個\

[root@yxp opt]#cat seq.txt 1 2 hehe 4 5 6 7 8 9 10 [root@yxp opt]#sed -i '2a\\n hehe' seq.txt [root@yxp opt]#cat seq.txt 1 2hehe hehe 4 5 6 7 8 9 10

替換

[root@yxp opt]#sed -i '2chahahaha' seq.txt [root@yxp opt]#cat seq.txt 1 hahahahahehe hehe 4 5 6 7 8 9 10

4.取反

[root@yxp opt]#seq 10|sed -n '2!p' 1 3 4 5 6 7 8 9 10

5.搜索替代

格式:格式:sed 行范圍 s/舊字符串/新字符串/替換標記

替換標記:
數(shù)字:表明新字符串將替換第幾處匹配的地方
g : 表明新字符串將會替換所有匹配的地方
p : 打印與替換命令匹配的行,與 -n 一起使用
w 文件 :將替換的結果寫到文件中
修改selinux開機不自啟配置文件

[root@yxp opt]#sed -i 's/SELINUX=enabled/SELINUX=disabled/' /etc/selinux/config

修改多行,使用r 以及-e

[root@yxp opt]#sed -ri -e 's/SELINUX=disabled/SELINUX=enabled/' /etc/selinux/config -e 's/SELINUXTYPE=targeted/SELINUXTYPE=111/' /etc/selinux/config

修改全局,后面加g

[root@yxp opt]#sed -i 's/root/admin/g' passwd

6.分組調(diào)用

#分組使用()(),調(diào)用第一段使用\1 [root@yxp opt]#echo 11aaxx |sed -r 's/(11)(aa)(xx)/\1/' 11 #調(diào)用第2個分組 [root@yxp opt]#echo 11aaxx |sed -r 's/(11)(aa)(xx)/\2/' aa #調(diào)用所有分組 [root@yxp opt]#echo 11aaxx |sed -r 's/(11)(aa)(xx)/\1\2\3/' 11aaxx

提取IP地址

[root@yxp ~]#ifconfig ens33 |sed -rn '2s/.*(inet) ([0-9.]+) (netmask) ([0-9.]+) (broadcast) ([0-9.]+).*/\2/p' 192.168.59.102

@和/效果一樣

[root@yxp ~]#echo /etc/sysconfig/network-scripts/ifcfg-ens33 |sed -nr 's@^(.*)/([^/]+)@\2@p'

總結

以上是生活随笔為你收集整理的Shell脚本工具三剑客 Sed的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。