shell 正規表示式 sed

2021-10-02 08:08:18 字數 3272 閱讀 6382

--字串

字串的初值(備用值),變數非空是不可使用

$正規表示式 可以配合某工具對文件進行過濾篩選

grep '^root' user   //以root開頭的行 

grep 'bash$' user  //以bash結尾的行

grep '[0-9]' user  //篩選出0-9的數字

grep '[^0-9]' user //排除所有0-9的數字

grep 'roo.' user   //篩選roo開頭的匹配單個字元

grep 'ro*t' user   //篩選出現任意次o的字元,可以是0次---rt  rot rooooot

像 小部件

grep "0:0:\" user  //篩選0:出現兩次的字串

擴充套件正規表示式

影象 小部件可以對文字檔案進行非互動式增刪改查,逐行處理

sed使用方式

1.前置命令|sed 選項 (定址符)指令o

2.sed 選項(定址符)指令 被處理檔案

選項-n 遮蔽預設輸出

-r 支援擴充套件正則

-i 寫入檔案

指令p 輸出

d 刪除

s 替換

[root@svr5 ~]# sed 'd' /etc/passwd                    //刪除所有行

[root@svr5 ~]# cat /etc/passwd                         //檢視原始文字,並未改動

[root@svr5 ~]# sed -i '1,4d' test.txt                    //刪除操作

[root@svr5 ~]# cat test.txt                                  //確認刪除結果

[root@svr5 ~]# sed -n 'p' a.txt            //輸出所有行,等同於cat a.txt

[root@svr5 ~]# sed -n '4p' a.txt            //輸出第4行

[root@svr5 ~]# sed -n '4,7p' a.txt        //輸出第4~7行

[root@svr5 ~]# sed -n '4,+10p' a.txt        //輸出第4行及其後的10行內容

[root@svr5 ~]# sed -n '/^bin/p' a.txt        //輸出以bin開頭的行

[root@svr5 ~]# sed -n '$=' a.txt            //輸出檔案的行數

[root@svr5 ~]# sed 's/xml/xml/' a.txt        //將每行中第乙個xml替換為xml

[root@svr5 ~]# sed 's/xml/xml/3' a.txt     //將每行中的第3個xml替換為xml

[root@svr5 ~]# sed 's/xml/xml/g' a.txt     //將所有的xml都替換為xml

[root@svr5 ~]# sed 's/xml//g' a.txt     //將所有的xml都刪除(替換為空串)

[root@svr5 ~]# sed 's#/bin/bash#/sbin/sh#' a.txt //將/bin/bash替換為/sbin/sh

[root@svr5 ~]# sed '4,7s/^/#/' a.txt         //將第4~7行注釋掉(行首加#號)

[root@svr5 ~]# sed 's/^#an/an/' a.txt         //解除以#an開頭的行的注釋(去除行首的#號)

1)刪除檔案中每行的第二個、最後乙個字元

分兩次替換操作,第一次替換掉第2個字元,第二次替換掉最後乙個字元:

[root@svr5 ~]# sed 's/.//2 ; s/.$//' nssw.txt

2)將檔案中每行的第乙個、倒數第1個字元互換

每行文字拆分為「第1個字元」、「中間的所有字元」、「倒數第1個字元」三個部分,然後通過替換操作重排順序為「3-2-1」:

[root@svr5 ~]# sed -r 's/^(.)(.*)(.)$/\3\2\1/' nssw.txt

3)刪除檔案中所有的數字

因原檔案內沒有數字,行首也沒有空格,這裡稍作做一點處理,生成乙個新測試檔案:

[root@svr5 ~]# sed 's/[0-9]//' nssw.txt

4)為檔案中每個大寫字母新增括號

[root@svr5 ~]# sed -r 's/([a-z])/[\1]/g' nssw.txt

刪除所有數字、行首空格的操作如下:

[root@svr5 ~]# sed -r 's/[0-9]//g;s/^( )+//' nssw2.txt

案例1)任務需求及思路分析

vsftpd服務的安裝、改目錄許可權、起服務等操作可以直接寫在指令碼中。

修改vsftpd.conf配置的工作可以使用sed命令,根據預設配置,只需要定位到以#anon開頭的行,去掉開頭的注釋即可。

2)根據實現思路編寫指令碼檔案:

[root@svr5 ~]# vim anonftp.sh

#!/bin/bash

yum -y install vsftpd                             //安裝vsftpd軟體

cp /etc/vsftpd/vsftpd.conf                 //備份預設的配置檔案

sed -i "s/^#anon/anon/" /etc/vsftpd/vsftpd.conf     //修改服務配置

chmod 777 /var/ftp/pub                             //調整目錄許可權

systemctl start vsftpd                             //啟動服務

systemctl enable vsftpd                            //設為自動執行

[root@svr5 ~]# chmod +x anonftp.sh

[root@svr5 ~]# ./anonftp.sh

sed 正規表示式

如果testfile的內容是 welcome to the world of regexp 現在要去掉所有的html標籤,使輸出結果為 hello world welcome to the world of regexp 怎麼做呢?如果用下面的命令 sed s g testfile 結果是兩個空行,...

sed 常用正規表示式

1.乙個比較實用的正規表示式 匹配html的嵌入 匹配 的嵌入碼 刪除僅由空字元組成的行 sed space d filename 匹配html標籤 例如 從html檔案中剔除html標籤 sed s g space d file.html 例如 要從下列 中去除 及其中包括的 b 4c6c2a65...

Linux正規表示式 sed

相比於grep,sed可以替換內容並輸出到螢幕上。sed 選項 動作 filename選項 n 將經過sed命令處理過的行輸出到螢幕 e 允許對輸入資料應用多條sed命令 i 用sed的修改結果直接修改所讀取的檔案 動作 d 刪除 p 列印 s 字串替換 本行 g 本行全域性替換 列印 etc pa...