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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

字符串的初值 正则表达式 sed应用

發(fā)布時(shí)間:2025/3/21 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字符串的初值 正则表达式 sed应用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

字符串的初值(備用值)

正則表達(dá)式

基礎(chǔ)正則列表?

擴(kuò)展正則列表

基本正則:?

?擴(kuò)展正則egrep:

基本元字符

{}限定次數(shù)?

其他元字符

整體及邊界匹配

sed基本用法

sed命令

命令格式

常見(jiàn)的命令選項(xiàng)

常用動(dòng)作指令

?輸出文本

刪除文本

替換文本

如何把/bin/bash換成/sbin/sh?

sed替換應(yīng)用

編寫(xiě)腳本,搭建ftp服務(wù),并且實(shí)現(xiàn)匿名上傳功能

sed的文本塊處理動(dòng)作

a行后追加練習(xí)

i行前追加練習(xí)

c替換練習(xí)

sed高級(jí)應(yīng)用

導(dǎo)入導(dǎo)出操作

!取反操作

sed綜合腳本應(yīng)用



字符串的初值(備用值)

  • 使用${}表達(dá)式,格式: ?${變量名:-(備用值)} ? ? ?變量為非空值時(shí)不能使用
[root@server0 ~]# vim 01.sh #!/bin/bash read -p "請(qǐng)輸入用戶(hù)名 " m useradd $m read -p "請(qǐng)輸入密碼" p #用戶(hù)不輸入密碼直接回車(chē)時(shí)使用 echo ${p:-123456} | passwd --stdin $m #123456作為用戶(hù)的密碼 [root@server0 ~]# bash 01.sh 請(qǐng)輸入用戶(hù)名 hsjdh 請(qǐng)輸入密碼 更改用戶(hù) hsjdh 的密碼 。 passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。

正則表達(dá)式

可以配合某工具對(duì)文檔進(jìn)行過(guò)濾篩選

  • 基礎(chǔ)正則列表?

正則符號(hào)描述
^匹配行首
$匹配行尾
[ ]集合,匹配集合中任意單個(gè)字符
[ ^ ]對(duì)集合進(jìn)行取反
.匹配任意單個(gè)字符
*匹配前一個(gè)字符任意次數(shù) ? ? (*不允許單獨(dú)使用)
\{n,m\}匹配前一個(gè)字符n到m次
\{n\}

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 匹配前一個(gè)字符n次

\{n,\}匹配前一個(gè)字符n次及以上
\( \ )保留,組合成一個(gè)整體
  • 擴(kuò)展正則列表

正則符號(hào)描述
+最少匹配一次
?最多匹配行首
{n,m}匹配n到m次
( )?組合為整體,保留,相當(dāng)于復(fù)制
|或者
\b單詞邊界

?

準(zhǔn)備素材:?

[root@server0 ~]# head -5 /etc/passwd > user [root@server0 ~]# cat user 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

基本正則:?

[root@server0 ~]# head -5 /etc/passwd > /mnt/test ? ##以test為素材 [root@server0 ~]# cat test 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 [root@server0 ~]# grep root test ? ##查找有root的行 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# grep ^root test ? ##查找以root開(kāi)頭的行 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# grep bash$ test ? ##查找以bash結(jié)尾的行 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# grep "[ro]" test ? ##查找字母r或者o的行 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

[root@server0 ~]# grep "[a-z]" test ? ##查找所有小寫(xiě)字母
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
[root@server0 ~]# grep "[A-Z]" test ? ?##查找所有大寫(xiě)字母 素材內(nèi)無(wú)大寫(xiě)所以無(wú)匹配.
[root@server0 ~]# grep "[0-9]" test ? ?##查找所有數(shù)字
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
[root@server0 ~]# grep "[a-Z]" test ? ? ?##查找所有字母
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
[root@server0 ~]# grep "[^ro]" test ? ? ##查找r或者o之外的內(nèi)容
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
[root@server0 ~]# grep "[^0-9]" test ? ? ?##查找數(shù)字之外的內(nèi)容
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?

[root@server0 ~]# vim test ##給test文件添加幾行,包括空格及空行 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 rt rot roooooooot rooot[root@server0 ~]# grep "." test ##查找任意字符,發(fā)現(xiàn)空格也匹配 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 rt rot roooooooot rooot[root@server0 ~]# grep ".*" test ##查找任意字符,發(fā)現(xiàn)空格及空行也匹配 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 rt rot roooooooot rooot[root@server0 ~]# grep "roo." test ##找root后面任意1個(gè)字符的行 root:x:0:0:root:/root:/bin/bash roooooooot rooot [root@server0 ~]# grep "ro.." test ##找ro后面任意2個(gè)字符的行 root:x:0:0:root:/root:/bin/bash roooooooot rooot [root@server0 ~]# grep "r..." test ##找r后面任意3個(gè)字符的行 root:x:0:0:root:/root:/bin/bash adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin roooooooot rooot [root@server0 ~]# grep "ro*t" test ##查找rot,其中字母o可以出現(xiàn)任意次,零次也行 root:x:0:0:root:/root:/bin/bash rt rot roooooooot rooot [root@server0 ~]# grep "ro\{1,2\}t" test ##o出現(xiàn)了1~2次 root:x:0:0:root:/root:/bin/bash rot [root@server0 ~]# grep "ro\{3,5\}t" test ##o出現(xiàn)了3~5次 rooot [root@server0 ~]# grep "ro\{3,8\}t" test  ##出現(xiàn)了3~8次 rooooooooto rooot [root@server0 ~]# grep "ro\{1,8\}t" test ##出現(xiàn)了1~8次 root:x:0:0:root:/root:/bin/bash rot roooooooot rooot [root@server0 ~]# grep "ro\{2\}t" test ##o出現(xiàn)了2次 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# grep "ro\{2,\}t" test ##o出現(xiàn)了2次及3次以上 root:x:0:0:root:/root:/bin/bash roooooooot rooot [root@server0 ~]# grep "ro\{3,\}t" test ##o出現(xiàn)了3次及3次以上 roooooooot rooot [root@server0 ~]# grep "\(0:\)\{2\}" test ##查找0:0: root:x:0:0:root:/root:/bin/bash

?擴(kuò)展正則egrep:

  • 文本處理順序:
  • 以行為單位,逐行進(jìn)行處理
  • 默認(rèn)只輸出與表達(dá)式相匹配的文本行
    • 基本用法: ? 等同于grep ?-E ,表示允許使用擴(kuò)展的正則表達(dá)式
  • 格式1:egrep ? [選項(xiàng)] ? "正則表達(dá)式" ? 文件...
  • 格式2: ?前置命令 ?| egrep ? [選項(xiàng)] ? "正則表達(dá)式"
  • 常用選項(xiàng)作用
    -i忽略字母大小寫(xiě)
    -v條件取反
    -c統(tǒng)計(jì)匹配的行數(shù)
    -q靜默,無(wú)任何輸出,一般用于檢測(cè)
    -n顯示出匹配結(jié)果所在的行號(hào)
    --color標(biāo)紅顯示匹配字串

    基本元字符

    類(lèi)型?含義示例說(shuō)明
    ^?
    ?
    匹配行首^abc以abc開(kāi)頭的行
    ^# ?以#開(kāi)頭的行(比如注釋行)
    $
    ?
    匹配行尾abc$以abc結(jié)尾的行
    ^$空行
    .單個(gè)字符. ?除換行符(\n)以外的任意單個(gè)字符
    +?
    ?
    最少匹配一次a+ ?一個(gè)或多個(gè)連續(xù)的a

    ? ? (abc)+ ? ? ? ? ??

    一個(gè)或多個(gè)連續(xù)的abc
    ?? ? ? ?
    ?
    最多匹配一次 ??a? ? ?

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0個(gè)或1個(gè)a

    (abc)?0個(gè)或1個(gè)abc
    *匹配任意次數(shù)a*?0個(gè)或多個(gè)連續(xù)的a
    (abc)*?0個(gè)或多個(gè)連續(xù)的abc
    * ?任意長(zhǎng)度的任意字符串

    {}限定次數(shù)?

    類(lèi)型含義示例說(shuō)明
    {n}匹配n次(ab){3}匹配ababab
    {n,m}匹配n-m次(ab){1,3}匹配ab,abab,ababab
    {n,}匹配至少n次(ab){2,}匹配2個(gè)及以上連續(xù)的ab

    其他元字符

    示例?說(shuō)明
    [alc45_?]匹配a,l,c,4,5,_,?
    [a-z]匹配任意小寫(xiě)字母
    [A-Z]匹配任意大寫(xiě)字母
    [0-9]匹配任意數(shù)字
    [a-Z0-9]匹配任意字母或數(shù)字
    [^A-Z]匹配包括非大寫(xiě)字母的行
    ^[^a-z]匹配不以小寫(xiě)字母開(kāi)頭的行

    整體及邊界匹配

    類(lèi)型含義示例說(shuō)明
    ()組合為整體ab{1,3}匹配ab,abb,abbb
    (ab){1,3}匹配ab,abab,ababab
    |或者root|bin

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?匹配root|bin

    \b單詞邊界\broot\b匹配單詞root,不匹配keroot,rooty等字符串
    \<單詞的開(kāi)頭\<th匹配以th開(kāi)頭的單詞
    \>單詞的結(jié)束\<root\>作用與\broot\b相同
    \w字母數(shù)字下劃線\wa匹配xa,不匹配#a
    \s匹配空白\sa匹配 ?a,不匹配xa
    \d匹配數(shù)字-P \da匹配n(數(shù)字)a,不匹配xa
    [root@server0 ~]# grep "\(0:\)\{2\}" test ##查找0:0:兩次 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# grep "ro\{2\}t" test ##查找前一個(gè)字符出現(xiàn)2次 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# grep -E "ro{2}t" test ##效果同上 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# egrep "ro{2}t" test ##效果同上 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# egrep "ro{1,3}t" test ##查找rot,其中o可以出現(xiàn)1次到3次 root:x:0:0:root:/root:/bin/bash rot rooot [root@server0 ~]# grep "ro\{1,\}t" test ##查找rot,其中o可以出現(xiàn)1次及1次以上 root:x:0:0:root:/root:/bin/bash rot roooooooot rooot [root@server0 ~]# egrep "ro{1,}t" test ##效果同上 root:x:0:0:root:/root:/bin/bash rot roooooooot rooot [root@server0 ~]# egrep "ro+t" test ##查找rot其中o最少可以出現(xiàn)1次 root:x:0:0:root:/root:/bin/bash rot roooooooot rooot [root@server0 ~]# grep "ro\{0,1\}t" test ##查找rot,其中o可以出現(xiàn)0次到1次 rt rot [root@server0 ~# egrep "ro{0,1}t" test ##效果同上 rt rot [root@server0 ~# egrep "ro?t" test ##查找rot,其中o可以出現(xiàn)1次或0次 rt rot [root@server0 ~]# egrep "root|bin" test ##查找有root或者bin的行 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 [root@server0 ~]# egrep "^root|^bin" test ##查找以root開(kāi)頭或者以bin開(kāi)頭的行 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin [root@server0 ~]# egrep "^(root|bin)" test ##效果同上 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin [root@pserver0 ~]# vim abc ##以ABC作為素材 the 1the $the* _thea [root@server0 ~]# grep "the" abc ##找有the的行 the 1the $the* _thea [root@server0 ~]# grep "the\b" abc ##找有the且右邊不能是字母數(shù)字下劃線 the 1the $the* [root@server0 ~]# grep "\bthe\b" abc ##找有the且兩邊不能是字母數(shù)字下劃線 the $the* [root@server0 ~]# grep "\bthe" abc ##找有the且左邊不能是字母數(shù)字下劃線 the $the*

    sed基本用法

    sed命令

    sed,流式編輯器

    • 非交互,基于模式匹配過(guò)濾文件及修改文本
    • 逐行處理,并將結(jié)果輸出到屏幕
    • 可實(shí)現(xiàn)對(duì)文本的輸出,刪除,替換,復(fù)制,剪切,導(dǎo)入,導(dǎo)出等各種操作

    命令格式

    • 格式一:前置命令 ? | ?sed ?選項(xiàng) ? (定址符)指令
    • 格式二: sed ? ? 選項(xiàng) ? ?(定址符)指令 ? ?被處理的文件

    常見(jiàn)的命令選項(xiàng)

    -n屏蔽默認(rèn)輸出(全部文本)
    -i直接修改文件內(nèi)容,對(duì)文件進(jìn)行實(shí)際操作
    -r啟用擴(kuò)展的正則表達(dá)式,若與其他選項(xiàng)一起使用,應(yīng)作為首個(gè)選項(xiàng)
    -e指定需要執(zhí)行的-e指令,支持使用多個(gè)-e參數(shù)
    -f指定需要執(zhí)行的腳本文件,需要提前將sed指令寫(xiě)入文件中

    條件,可以使行號(hào)或/正則/

    行號(hào)可以使用單個(gè)數(shù)字表示單行

    或者n,m表示連續(xù)的多行

    省略條件,正則默認(rèn)逐行處理全部文本

    匹配正則時(shí),則需要使用//

    常用動(dòng)作指令

    替換操作的分隔"/"可改用其他字符,如#.&等,便于修改文件路徑

    操作符用途指令示例
    p打印行2,4p ? ?輸出2 3 4 行
    2p;4p ? 輸出第2 ?4 行
    d刪除行2,4d ? ? 刪除第2 3 4 行
    s字符串替換s/old/new/ ? 將每行的第一個(gè)old替換為new
    s/old/new/3 ? 將每行的第三個(gè)old替換為new
    s/old/new/g ? ?將所有的old都替換為new

    ?輸出文本

    [root@server0 ~]# cat test ##以test文件作為素材 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 [root@server0 ~]# sed 'p' test ##輸出+默認(rèn)輸出,所以是每行出現(xiàn)2次 root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# sed -n 'p' test ## 輸出全文 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 [root@server0 ~]# sed -n '1p' test ##輸出第一行 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# sed -n '2p' test ##輸出第二行 bin:x:1:1:bin:/bin:/sbin/nologin [root@server0 ~]# sed -n '3p' test ##輸出第三行 daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@server0 ~]# sed -n '1,3p' test ##輸出1-3行 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@server0 ~]# sed -n '1p;3p' test ##輸出第1行和第3行 root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@server0 ~]# sed -n '1,+2p' test ##輸出第1行以及后面2行 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@server0 ~]# sed -n '3,+1p' test ##輸出第3行以及后面1行 daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin [root@server0 ~]# sed -n '1~2p' test ##輸出奇數(shù)行 root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# sed -n '2~2p' test ##輸出偶數(shù)行 bin:x:1:1:bin:/bin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin [root@server0 ~]# sed -n '/root/p' test ##輸出有root的行 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# sed -n '/^root/p' test ##輸出以root開(kāi)頭的行 root:x:0:0:root:/root:/bin/bash [root@server0 ~]# free | sed -n '2p' ##輸出free指令生成的文檔的第2行 Mem: 1446924 70232 1108292 8608 268400 1211636 [root@server0 ~]# sed -rn '/root|bin/p' test ##輸出有root或者有bin的行 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 [root@server0 ~]# sed -n '$=' test ##統(tǒng)計(jì)輸出全文最后1行行號(hào) 5

    刪除文本

    [root@server0 ~]# sed 'd' test ##刪除全文 [root@server0 ~]# sed '1d' test ##刪除第1行,顯示剩余行 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 [root@server0 ~]# sed '2d' test ##刪除第2行, root:x:0:0:root:/root:/bin/bash 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 [root@server0 ~]# sed '5d' test ##刪除第5行 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 [root@server0 ~]# sed '1,3d' test ##刪除1-3行 adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# sed '3,+2d' test ##刪除第3行以及后面2行 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin [root@server0 ~]# sed '/bash$/d' test ##刪除以bash結(jié)尾的行 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 [root@server0 ~]# sed '1d;3d' test ##刪除第1行和第3行 bin:x:1:1:bin:/bin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# sed '1~2d' test ##刪除奇數(shù)行 bin:x:1:1:bin:/bin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin [root@server0 ~]# sed '2~2d' test ##刪除偶數(shù)行 root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0 ~]# sed '$d' test ##刪除全文最后1行 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 [root@server0 ~]# sed '/var/!d' test ##不刪除有var的行 adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

    替換文本

    [root@server0 ~]# vim hihi ##以hihi作為素材 2017 2011 2018 2017 2017 2024 2017 2017 2017 [root@server0 ~]# sed 's/2017/xxxx/' hihi ##將所有行的第1個(gè)2017替換成xxxx xxxx 2011 2018 xxxx 2017 2024 xxxx 2017 2017 [root@server0 ~]# sed 's/2017/xxxx/2' hihi ##將全文的第2列的2017替換成xxxx 2017 2011 2018 2017 xxxx 2024 2017 xxxx 2017 [root@server0 ~]# sed 's/2017/xxxx/g' hihi ##將全文的2017替換成xxxx xxxx 2011 2018 xxxx xxxx 2024 xxxx xxxx xxxx [root@server0 ~]# sed '2s/2017/xxxx/' hihi ##將第2行的第1個(gè)2017替換成xxxx 2017 2011 2018 xxxx 2017 2024 2017 2017 2017 [root@server0 ~]# sed '3s/2017/xxxx/2' hihi ##將第3行的第2個(gè)2017替換成xxxx 2017 2011 2018 2017 2017 2024 2017 xxxx 2017 [root@server0 ~]# sed '3s/2017//2' hihi ##潛在的刪除功能,將第3行的第2個(gè)2017替換成空 2017 2011 2018 2017 2017 2024 2017 2017 [root@server0 ~]# sed 's/2024/xxxx/p' hihi ##將所有行的2024替換成xxxx 2017 2011 2018 2017 2017 xxxx 2017 2017 xxxx 2017 2017 2017

    如何把/bin/bash換成/sbin/sh?

    [root@server0 ~]# cat test ?##以test作為素材
    root:x:0:0:root:/root:/bin/bash
    [root@server0 ~]# sed ?'s/\/bin\/bash/\/sbin\/sh/' ? test ?##正常替換,繁瑣
    root:x:0:0:root:/root:/sbin/sh
    [root@server0 ~]# sed ? 's#/bin/bash#/sbin/sh#' ? ?test ? ##修改替換符,簡(jiǎn)潔
    root:x:0:0:root:/root:/sbin/sh?


    sed替換應(yīng)用

    創(chuàng)建素材文件:nssw.txt

    [root@server0 ~]# vim nssw.txt Hello the world ni ha4o ma beijing

    刪除文件中每行的第二個(gè),最后一個(gè)字符

    [root@server0 ~]# sed 's/.//2;s/.$//' nssw.txt? hllo the world n hao ma beijin

    將文件中每行的第一個(gè),倒數(shù)第一個(gè)字符互換

    [root@server0 ~]# sed -r 's/^(.)(.*)(.)$/\3\2\1/' nssw.txt dello the worlh gi hao ma beijinn

    刪除文件中的數(shù)字

    [root@server0 ~]# sed -i 's/[0-9]//g' nssw.txt hello the world ni hao ma beijing

    為文件中每個(gè)大寫(xiě)字母添加括號(hào)

    [root@server0 ~]# sed -r 's/([A-Z])/{\1}/g' nssw.txt {H}ello t{H}e world ni hao {M}a bei{J}ing [root@server0 ~]# sed -r 's/([A-Z])/[\1]/g' nssw.txt [H]ello t[H]e world ni hao [M]a bei[J]ing [root@server0 ~]# sed -r 's/([A-Z])/(\1)/g' nssw.txt (H)ello t(H)e world ni hao (M)a bei(J)ing

    編寫(xiě)腳本,搭建ftp服務(wù),并且實(shí)現(xiàn)匿名上傳功能

    測(cè)試:在真機(jī)上連接ftp://172.25.0.11進(jìn)入pub目錄,注意selinux和防火墻的影響!!!!!!!!!!!!!!!!!!!!!!!

    [root@server0~]# vim test03.sh #!/bin/bash #這是一個(gè)簡(jiǎn)單的ftp服務(wù) if [ "$USER" != "root" ];then echo "你不是管理員,沒(méi)有權(quán)限哦!" exit 2 fi rpm -q vsftpd if [ $? -ne 0 ];then yum -y install vsftpd &> /dev/null sed -i '/^#anon_upl/s/#//' /etc/vsftpd/vsftpd.conf systemctl restart vsftpd systemctl enable vsftpd &> /dev/null chmod 777 /var/ftp/pub #setenforce 0 ##安裝有防火墻就需要這2行 #systemctl stop firewalld else echo "請(qǐng)稍等..." sed -i '/^#anon_upl/s/#//' /etc/vsftpd/vsftpd.conf systemctl restart vsftpd systemctl enable vsftpd &> /dev/null chmod 777 /var/ftp/pub #setenforce 0 ##安裝有防火墻就需要這2行 #systemctl stop firewalld fi

    sed的文本塊處理動(dòng)作

    操作符用途指令示例
    i
    ?
    行前插入文本2iYY ? ? 在第二行之前添加文本行"YY"
    4,7iYY ? 在第4-7行的每一行前添加文本行
    a
    ?
    行后插入文本2aYY ? ? ?在第二行之后添加文本
    /^XX/aYY ? 在以XX開(kāi)頭的行之后添加文本
    c替換當(dāng)前行2cYY ? ? ?將第二行的內(nèi)容修改為"YY"

    處理多行文本:修改后的文本有多行時(shí)

    • 以換行符 \n 分隔
    • 或者,使用 \ 強(qiáng)制換行?

    a行后追加練習(xí)

    [root@server0 ~]# cat user #準(zhǔn)備素材 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[root@server0 ~]# sed '1a XXXX' user #第一行下追加字母 root:x:0:0:root:/root:/bin/bash XXXX 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[root@server0 ~]# sed '1,3a XXXX' user #第1-3行下都追加字母 root:x:0:0:root:/root:/bin/bash XXXX bin:x:1:1:bin:/bin:/sbin/nologin XXXX daemon:x:2:2:daemon:/sbin:/sbin/nologin XXXX adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin[root@server0 ~]# sed '1,+1a XXXX' user #第一行以及后面的一行追加字母 root:x:0:0:root:/root:/bin/bash XXXX bin:x:1:1:bin:/bin:/sbin/nologin XXXX 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[root@server0 ~]# sed '/root/a XXXX' user #有root的行下追加 root:x:0:0:root:/root:/bin/bash XXXX 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

    i行前追加練習(xí)

    [root@server0~]# sed 'i 666' test ##所有行前添加一行666 666 root:x:0:0:root:/root:/bin/bash 666 bin:x:1:1:bin:/bin:/sbin/nologin 666 daemon:x:2:2:daemon:/sbin:/sbin/nologin 666 adm:x:3:4:adm:/var/adm:/sbin/nologin 666 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@server0~]# sed '2,+1i 666' test ##第2~3行前添加一行666 root:x:0:0:root:/root:/bin/bash 666 bin:x:1:1:bin:/bin:/sbin/nologin 666 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 [root@server0~]# sed '/root/i 666' test ##有root的行前添加一行666 666 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 [root@server0~]# sed '/^root/i 666' test ##以root開(kāi)頭的行添加一行666 666 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 [root@server0~]# sed '2i 666' test ##第2行前添加一行666 root:x:0:0:root:/root:/bin/bash 666 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

    c替換練習(xí)

    [root@server0 ~]# sed 'c XXXX' user #將所有行替換為XXXX XXXX XXXX XXXX XXXX XXXX[root@server0 ~]# sed '1c XXXX' user #將第一行替換成XXXX XXXX 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[root@server0 ~]# sed '1,2c XXXX' user #將第一二行替換成XXXX XXXX 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[root@server0 ~]# sed '/root/c XXXX' user #將以root開(kāi)頭的行替換成XXXX XXXX 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

    sed高級(jí)應(yīng)用

    導(dǎo)入導(dǎo)出操作

    • r 動(dòng)作應(yīng)結(jié)合 -i 選項(xiàng)才會(huì)存入,否則只輸出
    • w 動(dòng)作以覆蓋的方式另存為新文件
    操作符 ?用途指令示例
    r讀取文件3r b.txt 在第3行下方添加文件b.txt
    4,7r b.txt?在第4-7行后添加文件b.txt
    w保存到文件3w c.txt 將第3行另存為文件c.txt
    4,7w c.txt 將第4-7行另存為文件c.txt

    !取反操作

    用途:

    • 根據(jù)定址條件取反

    示例

    • 列出不使用bash的用戶(hù)賬號(hào)記錄
    [root@server0]# sed -n '/bash$/!p' /etc/passwd ##輸出不是以bash結(jié)尾的行 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 nobody:x:99:99:Nobody:/:/sbin/nologin ......

    sed綜合腳本應(yīng)用

    編寫(xiě)一個(gè)腳本

    要求編寫(xiě)腳本getupwd.sh,實(shí)現(xiàn)以下需求:

    • 找到使用bash作登錄Shell的本地用戶(hù)
    • 列出這些用戶(hù)的shadow密碼記錄
    • 按每行“用戶(hù)名 --> 密碼記錄”保存到getupwd.log,如圖-1所示

    方案:

  • 先用sed工具取出登錄Shell為/bin/bash的用戶(hù)記錄,保存為臨時(shí)文件/tmp/urec.tmp,并計(jì)算記錄數(shù)量
  • 再結(jié)合while循環(huán)遍歷取得的賬號(hào)記錄,逐行進(jìn)行處理
  • 針對(duì)每一行用戶(hù)記錄,采用掐頭去尾的方式獲得用戶(hù)名、密碼字串
  • 按照指定格式追加到/tmp/getuupwd.log文件
  • 結(jié)束循環(huán)后刪除臨時(shí)文件,報(bào)告分析結(jié)果
  • [root@server0 ~]# vim 1.sh #!/bin/bash #這是一個(gè)存放可登陸shell用戶(hù)的腳本 u=`sed -n '/bash$/s/:.*//p' /etc/passwd` #先找到以bash結(jié)尾的登錄用戶(hù) for i in $u #交給for循環(huán)處理 dow=`grep "$i:" /etc/shadow` #找到每個(gè)用戶(hù)對(duì)應(yīng)的shadow記錄w1=${w#*:} #掐頭w2=${w1%%:*} #去尾,得到純粹的密碼信息echo "$i --> $w2" done [root@server0 ~]# bash 1.sh root --> $6$UiGI4Tc2$htsXYn5cJnOqv3P1VLcUSgfjDu2pL5yiJBuua6foZAHdwqeuLHfYUfS/vBn27Wjvoel8EJgtdsMjyquqvKAmf1 student --> $6$8oIjLCsc$/n1iQXYh1E6.uOEuJKgioqAtmqm2TQmkJGF2RwyteIr1tIfrPdiRYgWe6Sjen5/eMij2uHM/a1tue/QRlo3X80 hsjdh --> $6$98VeecB8$Egm5RIgr4atgvvJVIYQyXf5BIMfJLKt8txHkWU/aTxJIZTqZWLOwxtHdS7mbgnUlGFi7sqvrB6npWosidKzQ41

    ?

    總結(jié)

    以上是生活随笔為你收集整理的字符串的初值 正则表达式 sed应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

    主站蜘蛛池模板: 欧美日韩看片 | 深夜福利日韩 | 不卡的av电影 | 波多野结衣视频在线观看 | 亚洲色图50p | 一区二区在线国产 | 久久久久久久久久影视 | 日韩久久中文字幕 | 天堂男人网 | 国产精品伦理 | 在线一二区 | 麻豆changesxxx国产 | 国产乱国产乱老熟 | 性久久久久久 | 五月天精品 | 姐姐你真棒插曲快来救救我电影 | 51 吃瓜网 | 一本加勒比波多野结衣 | 亚洲一区在线免费 | 亚洲欧美视频二区 | 日本高清免费看 | 亚洲黄色片网站 | 亚洲三级在线视频 | 麻豆精品免费视频 | 欧美成人一区在线观看 | 日本妈妈3 | 辟里啪啦国语版免费观看 | 中文字幕一区日韩 | 合欢视频在线观看 | 日本污视频在线观看 | 欧美伦乱| 欧美日韩h | 婷婷色激情 | 日韩av在线播放一区 | 日本一级淫片 | 老妇女玩小男生毛片 | 国产又黄又大又爽 | 老司机在线观看视频 | 日本道在线观看 | 久久精品免费在线 | 91蜜臀精品国产自偷在线 | 欧美特黄一区二区三区 | 欧美性猛交乱大交3 | 草草国产| 成人漫画网站 | 最新啪啪网站 | 国产欧美日韩一区 | 艳妇臀荡乳欲伦交换h漫 | 日本精品黄| japanese av在线 | 国产初高中真实精品视频 | 人成免费| 欧洲成人免费视频 | 欧美精品hd | 星铁乱淫h侵犯h文 | 色狠久| 美日韩成人av | 一二三四视频社区在线 | 久久成人在线观看 | 牛人盗摄一区二区三区视频 | 成人一区电影 | 蜜桃在线一区二区三区 | 俄罗斯色片 | 亚洲色域网 | av在线不卡播放 | 人人艹视频 | 美国免费高清电影在线观看 | 日本激情一区 | 美女啪啪动态图 | 精品在线免费播放 | 国产真实乱 | 亚洲av成人片色在线观看高潮 | 久久福利社| 综合视频在线观看 | 性欧美videos另类艳妇3d | av在线麻豆| 亚洲精品一区二区三区精华液 | 国产不卡在线观看视频 | 男女无遮挡网站 | 高跟鞋肉丝交足91 | 欧洲性开放大片 | 特级做a爱片免费69 少妇第一次交换又紧又爽 亚洲大胆人体 | 国产精品中文久久久久久 | 亚洲精品视频免费看 | 毛片aaaaaa | 污视频网址在线观看 | 欧美一级专区 | 久久ww| 欧美专区第一页 | 亚洲v在线观看 | 国产精品无码一区二区三区三 | 日本涩涩网站 | 性色av网址 | 亚洲图片一区二区三区 | 图片一区二区 | 热热热色| 亚洲xx站| 国产亚洲欧美一区二区三区 | 操屁股视频|