sed基礎

sed 是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space ),接著用sed 命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。Sed 主要用來自動編輯一個或多個文件, 簡化對文件的反復操作, 編寫轉換程序等

[root@localhost fsy]# sed  -n  ‘3p’   /etc/passwd      // 只打印第三行
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@localhost fsy]#  sed -n ‘2p’   // 只多輸出了第二行
aaa
bbb
bbb
accc^H^[[3~
ssdfs

fdfd
dds

[root@localhost fsy]# sed -n ‘2p’ < /etc/passwd   //  用sed實現標準輸入
bin:x:1:1:bin:/bin:/sbin/nologin

[root@localhost fsy]# sed ‘3,6=’  passwd

[root@localhost fsy]# cat /etc/passwd | sed -n ‘2p’
bin:x:1:1:bin:/bin:/sbin/nologin

[root@localhost fsy]# seq 10
1
2
3
4
5
6
7
8
9
10
[root@localhost fsy]# seq 10 | sed -n ‘5p’
5

sed可以對輸出做一些處理,而不是只處理文件

[root@localhost ~]# ifconfig | sed -n 2p
          inet addr:192.168.1.128  Bcast:192.168.1.255  Mask:255.255.255.0

[root@localhost fsy]# cat -n passwd   // 空行加行號

[root@localhost fsy]# cat -b passwd   //  空行不加行號

[root@localhost fsy]# sed -n ‘/^root/p’ passwd  // 打印包含root的行
root:x:0:0:root:/root:/bin/bash

[root@localhost fsy]# sed -n ‘10,20p’ passwd   // 打印第10行到第20行的內容

[root@localhost fsy]# sed -n ’10,+20p’ passwd   //  打印第10行到第30行的內容

地址定界

[root@localhost fsy]# sed -n ‘/^h/,/^s/p’  passwd   // 打印h開頭的行到s開頭的行

[root@localhost fsy]# sed -n ’10,/^s/p’ passwd

[root@localhost fsy]# sed -n ‘/^s/,40p’ passwd

步進

[root@localhost fsy]# seq 10| sed -n  ‘1~2p’   // 取奇數行
1
3
5
7
9

[root@localhost fsy]# seq 10 |sed -n ‘2~2p’
2
4
6
8
10

[root@localhost ~]# seq 10 |sed ‘2~2d’
1
3
5
7
9

[root@localhost fsy]# cat passwd | sed ‘3,6a ==========================’

[root@localhost fsy]# cat passwd | sed ‘3~6a ==========================’

[root@localhost fsy]# cat passwd | sed ‘3,6a\                   ==========================’

[root@localhost fsy]# cat passwd | sed ‘3,6i\                   ==========================’            // 在前面插

[root@localhost fsy]# cat passwd | sed ‘3,6c\                   ==========================’                 // 替代

[root@localhost fsy]# cat passwd | sed ‘3,6a\   ==========================\n   +++++++++++++++++++++++’          // 插入兩行

[root@localhost fsy]# cat passwd2 | sed -n ‘3,6w ff’
[root@localhost fsy]# cat ff
     3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4 adm:x:3:4:adm:/var/adm:/sbin/nologin
     5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6 sync:x:5:0:sync:/sbin:/bin/sync

[root@localhost fsy]# cat passwd2 | sed ‘3,6r /etc/issue’

[root@localhost fsy]# sed -n  ‘3,6!p’ passwd2     // 取反

[root@localhost fsy]# seq 10 |sed -n ‘2~2!p’

[root@localhost fsy]# sed ‘2d’ f1
1
3
4
5
6
7
8
9
10

[root@localhost fsy]# sed -i ‘2d’ f1          //  真的把文件給改了
[root@localhost fsy]# cat f1
1
3
4
5
6
7
8
9
10

[root@localhost fsy]# sed -i.txt ‘2d’ f1              //  先做備份再修改文件
[root@localhost fsy]# cat f1.txt
1
2
3
4
5
6
7
8
9
10

搜索替代

[root@localhost fsy]# sed ‘s/root/Root/’ passwd
[root@localhost fsy]# sed ‘s/root/Root/g’ passwd

[root@localhost fsy]# sed -n ‘s/root/Root/gp’ passwd          // 只顯示替代成功的行
Root:x:0:0:Root:/Root:/bin/bash
operator:x:11:0:operator:/Root:/sbin/nologin

[root@localhost fsy]# sed -n ‘s/root/Root/w p1’ passwd     // 把結果保存到p1文件
[root@localhost fsy]# cat p1
Root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/Root:/sbin/nologin

[root@localhost fsy]# sed -n ‘s/root/Root/gw p1’ passwd
[root@localhost fsy]# cat p1
Root:x:0:0:Root:/Root:/bin/bash
operator:x:11:0:operator:/Root:/sbin/nologin

[root@localhost fsy]# sed -i.bak ‘s/6.9/9.9/g’   /etc/centos-release 
[root@localhost fsy]# cat /etc/centos-release
CentOS release 9.9 (Final)

[root@localhost fsy]# cat /etc/selinux/config 

This file controls the state of SELinux on the system.

SELINUX= can take one of these three values:

    enforcing – SELinux security policy is enforced.

    permissive – SELinux prints warnings instead of enforcing.

    disabled – No SELinux policy is loaded.

SELINUX=enforcing

SELINUXTYPE= can take one of these two values:

    targeted – Targeted processes are protected,

    mls – Multi Level Security protection.

SELINUXTYPE=targeted 

[root@localhost fsy]# sed ‘s/SELINUX=enforcing/SELINUX=disabled/’  /etc/selinux/config

[root@localhost fsy]# sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’  /etc/selinux/config

46分鐘有總結

[root@localhost fsy]# sed -n ‘/^$/=’ /etc/fstab   //  顯示空行的行號
1
19

[root@localhost fsy]# sed -n -e ‘/^s/=’ -e ‘/^U/p’   /etc/fstab
UUID=9341e6da-5470-4df8-89c5-bfbc3a689d8d /                       ext4    defaults        1 1
UUID=12c88f0f-aa56-4be1-9c87-eaf0cf524e75 /app                    ext4    defaults        1 2
UUID=20192758-4252-4bf6-83d4-52da93ffdab4 /boot                   ext4    defaults        1 2
UUID=567c9b8b-5207-4a4c-8548-9f5b6ee49c3a /home                   ext4    defaults        1 2
UUID=3ac9cd7c-8d23-43a6-a550-9f93df25f5cf swap                    swap    defaults        0 0
16
UUID=”5263027d-f571-4c4a-98d8-930e41e0e265″  /home  ext4   usrquota,grpquota 0 0

[root@localhost ~]# sed -n ‘/^$/=’ -e ‘/^U/=’  /etc/fstab
sed: can’t read /^$/=: No such file or directory
9
10
11
12
13
18

[root@localhost ~]# sed -n -e ‘/^$/=’ -e ‘/^$/p’  /etc/fstab
1

19

4

[root@localhost ~]# ifconfig|sed -n 2p|sed  -e  ‘s@.r:@@’
192.168.1.128  Bcast:192.168.1.255  Mask:255.255.255.0

[root@localhost ~]# ifconfig|sed -n 2p|sed  -e  ‘s@.r:@@’
192.168.1.128  Bcast:192.168.1.255  Mask:255.255.255.0

[root@localhost ~]# ifconfig|sed -n 2p|sed  -e  ‘s@.r:@@’
192.168.1.128  Bcast:192.168.1.255  Mask:255.255.255.0

[root@localhost ~]# ifconfig|sed -n 2p|sed  -e  ‘s@.r:@@’ -e ‘s@B.@@’
192.168.1.128  

[root@localhost ~]# ifconfig|sed -n 2p|sed  -e  ‘s@.r:@@’ -e ‘s@B.@@’
192.168.1.128  

[root@localhost ~]# ifconfig|sed -n 2p|sed  -e  ‘s@.r:@@’ -e ‘s@B.@@’
192.168.1.128  

[root@localhost ~]# ifconfig | sed   -e  ‘/Bcast/s/.r://’  -e  ‘/Bcast/s/B.//’                 // 多點替代

[root@localhost ~]# ifconfig | sed   -e  ‘/Bcast/s/.r://’  -e  ‘/Bcast/s/B.//’

[root@localhost ~]# ifconfig eth0 | sed -e ‘s/.inet addr://’ -e  ‘/Bcast/s/B.//’  -n -e 2p
192.168.1.128  

[root@localhost ~]# ifconfig |sed -e ‘s@.addr:@@’ -e ‘s@Bcast:.@@’  -n -e 2p
192.168.1.128  

取基名
echo  /etc/sysconfig/network-scripts/ |sed -r  ‘s@(^/.
/)([^/]+/?)@\2@’

取目錄名
echo  /etc/sysconfig/network-scripts/ |sed -r  ‘s@(^/.*/)([^/]+/?)@\1@’

對/etc/fstab非#開頭的加注釋
sed -r  ‘s/(^[^#])/#\1/’ /etc/fstab 
sed -r  ‘s/^[^#]/#&/’ /etc/fstab

下面是sed高級用法

原創文章,作者:fsy,如若轉載,請注明出處:http://www.www58058.com/74562

(0)
fsyfsy
上一篇 2017-05-01
下一篇 2017-05-01

相關推薦

  • N26 第一周博客作業

    1、描述計算機的組成及其功能。 現代的計算機大多遵循的是 馮·諾依曼 計算機體系,主要有如下幾個組成部分: 運算器      :也被稱為算術邏輯單元(ALU),可視為計算機的大腦,它主要進行算術運算和邏輯運算; 邏輯控制器  :則負責將計算機的其他部件聯系起來,其功能是從存儲設備和輸入輸出設備中讀取指令和數據,對指令進…

    Linux干貨 2017-01-08
  • 第一周linux學習總結

    1、描述計算機的組成及其功能
    2、按系列羅列Linux的發行版,并描述不同發行版之間的聯系與區別
    3、描述Linux的哲學思想,并按照自己的理解對其進行解釋性描述
    4、說明Linux系統上命令的使用格式;詳細介紹ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相應的示例來闡述
    5、如何在Linux系統上獲取命令的幫助信息,請詳細列出,并描述man文檔的章節是如何劃分的
    6、請羅列Linux發行版的基礎目錄名稱命名法則及功用規定

    Linux干貨 2017-12-04
  • 強大的vim編輯器

    vim編輯器 一、Vim編譯器的概述 vi: Visual Interface,文本編輯器 v 文本:ASCII, Unicode v  文本編輯種類:      行編輯器: sed      全屏編輯器:nano,   &nbs…

    Linux干貨 2016-08-12
  • 進程管理

    Process Manager 工作管理  jobs ctrl+z,& bg,fg nohup 進程,資源管理  查看:pstree,ps,top,vmstat,pmap 查詢:pgrep,pidof,fuser,lsof 管理:kill,nice,renice 管理軟件or命令  htop glances dstat …

    Linux干貨 2016-04-11
  • ping命令的部分用法

    Linux系統的ping命令是常用的網絡命令,它通常用來測試與目標主機的連通性,我們經常會說“ping一下某機器,看是不是開著”不能打開網頁時會說“你先ping網關地址192.168.1.1試試”。它通過發送ICMP ECHO_REQUEST數據包到網絡主機(send ICMP ECHO_REQUEST to&nbsp…

    Linux干貨 2017-07-30
  • N25_第一周_yecho

    ???

    Linux干貨 2016-12-01
欧美性久久久久