shell編程系列9--文本處理三劍客之sed概述及常見用法總結

shell編程系列9--文本處理三劍客之sed概述及常見用法總結


sed的工做模式:對文本的行數據一行行處理,以下圖
sed(stream editor),是流編輯器,依據特定的匹配模式,對文本逐行匹配,並對匹配行進行特定處理 語法格式 第一種形式:stdout | sed [option] "pattern command" 第二種形式:sed [option] "pattern command" file 命令格式:sed [option] "/pattern/command" file sed的處理過程 sed的選項 選項 -n 只打印模式匹配行 -e 直接在命令行進行sed編輯,默認選項 -f 編輯工做保存在文件中,指定文件執行 -r 支持擴展正則表達式 -i 直接修改文件內容 # 只打印數據 [root@es01 shell]# cat sed.txt I love python I love PYTHON Hadoop is bigdata frame [root@es01 shell]# sed 'p' sed.txt I love python I love python I love PYTHON I love PYTHON Hadoop is bigdata frame Hadoop is bigdata frame [root@es01 shell]# sed -n 'p' sed.txt I love python I love PYTHON Hadoop is bigdata frame # -n 只顯示處理的行,靜默模式 [root@es01 shell]# sed '/python/p' sed.txt I love python I love python I love PYTHON Hadoop is bigdata frame [root@es01 shell]# sed -n '/python/p' sed.txt I love python [root@es01 shell]# # 經過文件引入規則進行流處理 [root@es01 shell]# cat edit.sed /python/p [root@es01 shell]# sed -n -f edit.sed sed.txt I love python # -r支持擴展正則表達式 [root@es01 shell]# sed -n -r '/python|PYTHON/p' sed.txt I love python I love PYTHON # 將love替換爲like,源文件不修改 [root@es01 shell]# sed -n 's/love/like/g' sed.txt [root@es01 shell]# sed -n 's/love/like/g;p' sed.txt I like python I like PYTHON Hadoop is bigdata frame [root@es01 shell]# cat sed.txt I love python I love PYTHON Hadoop is bigdata frame # 將love替換爲like,修改源文件 [root@es01 shell]# sed -i 's/love/like/g' sed.txt [root@es01 shell]# cat sed.txt I like python I like PYTHON Hadoop is bigdata frame sed中的pattern詳解 pattern用法表 pattern用法: 1、LineNumber 直接指定行號 sed -n "17p" file 打印file文件的第17行 2、StartLine,EndLine 指定起始行號和結束行號 sed -n "10,20p" file 打印file文件的10到20行 3、StartLine,+N 指定起始行號,而後後面N行 sed -n "10,+5p" file 打印file文件從第10行開始,日後面5行的全部行 4、/pattern1/ 正則表達式匹配的行 sed -n "/^root/p" file 打印file文件中以root開頭的行 5、/pattern1/,/pattern2/ 從匹配到pattern1的行,到匹配到pattern2的行 sed -n "/^ftp/,/^mail/p" file 打印file文件中第一個匹配到以ftp開頭的行,到第二個mail的行 [root@localhost ~]# sed -n "/^mail/,/^ftp/p" passwd 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 6、/LineNumber,/pattern1/ 從指定行號開始匹配,直到匹配到pattern1的 sed -n "4,/^hdfs/p" file 打印file文件中第4行開始匹配,直到以hdfs開頭的行 7、/pattern1/,LineNumber 從pattern1匹配的行開始,直到匹配到特定 sed -n "/root/,10p" file 打印file文件中匹配root的行,直到第10行結束 # 打印5行並日後+3行 [root@es01 shell]# sed -n '5,+3p' /etc/passwd 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 # 查找bash的行 [root@es01 shell]# sed -n '/bash/p' /etc/passwd root:x:0:0:root:/root:/bin/bash ajie:x:1000:1000:ajie:/home/ajie:/bin/bash elasticsearch:x:1001:1001::/home/elasticsearch:/bin/bash # 查找/sbin/nologin的行 [root@es01 shell]# sed -n '/\/sbin\/nologin/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 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 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin # 正則匹配 # 打印以root開頭的行 [root@es01 shell]# sed -n "/^root/p" /etc/passwd root:x:0:0:root:/root:/bin/bash # 查找root開頭的行到 sync 開頭的行結束 [root@es01 shell]# sed -n '/^root/,/^sync/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 [root@es01 shell]# # 查找root開頭的行,到10行結束 [root@es01 shell]# sed -n '/root/,10p' /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 編輯命令對照表- 類別 編輯命令 含義 查詢 p 打印 增長 a 日後追加 i 往前追加 r 外部文件讀入,日後追加 w 匹配行寫入外部文件 編輯命令對照表- 刪除 d 刪除 修改 s/old/new 將行內第一個old替換爲new s/old/new/g 將行內所有的old替換爲new s/old/new/2g 將行內前2個old替換爲new s/old/newig 將行內old所有替換爲new,忽略大小寫 對文件的操做無非就是增長、刪除、查詢、修改 編輯命令用法總結: 查詢: 1、p 打印 刪除: 2、d 刪除 增長: 3、a 匹配到的行後追加內容 4、i 匹配到的行前追加內容 5、r 將後面指定文件的內容追加到匹配到的行後面 6w 將匹配到的行內容另存到其餘文件中 修改: 7、s/pattern/string/ 查找並替換,查找符合pattern模式的字符串,將其替換爲string 適配(1、2、3、4、五) s/pattern/string/g g表示表示所有匹配 s/pattern/string/2g 2g表示:同一行內,只替換前兩個匹配到的,剩下的不替換 s/pattern/string/ig 加i參數表示匹配時忽略大小寫,g表示匹配到的所有替換 其餘編輯命令: 8、= 顯示行號 什麼是反向引用? &和\1 引用模式匹配到的整個串 sed "s/1..e/&r/g" file 在file中搜尋以1開頭,而後跟兩個任意字符,以e結尾的字符串 sed "s/\(1..e\)/\1r/g" file 和上面實現同樣的功能,使用\1表明搜尋到的字符串 上面兩種方式實現了同樣的功能,分別使用&和\1引用前面匹配到的整個字符串 二者區別在於&只能表示匹配到的完整字符串,只能引用整個字符串:而\1可使用()對匹配到的字符串進行二次操做 例如:若是咱們僅想要替換匹配到的字符串的一部分,name必須使用\1這種方式,不能使用& sed中引用變量時注意事項: 1、匹配模式中存在變量,則建議使用雙引號 2、sed中須要引入自定義變量時,若是外面使用單引號,則自定義變量也必須使用單引號 [root@es01 shell]# cat -n passwd 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin 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 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8 halt:x:7:0:halt:/sbin:/sbin/halt 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10 operator:x:11:0:operator:/root:/sbin/nologin 11 games:x:12:100:games:/usr/games:/sbin/nologin 12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 13 nobody:x:99:99:Nobody:/:/sbin/nologin 14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin 15 dbus:x:81:81:System message bus:/:/sbin/nologin 16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin 17 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 18 postfix:x:89:89::/var/spool/postfix:/sbin/nologin 19 ajie:x:1000:1000:ajie:/home/ajie:/bin/bash 20 chrony:x:998:996::/var/lib/chrony:/sbin/nologin 21 elasticsearch:x:1001:1001::/home/elasticsearch:/bin/bash 22 nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin 23 mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin # 刪除 passwd 文件的第一行 [root@es01 shell]# sed -i '1d' passwd [root@es01 shell]# head 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 games:x:12:100:games:/usr/games:/sbin/nologin # 刪除 1-3 行 [root@es01 shell]# sed -i '1,3d' passwd [root@es01 shell]# head passwd 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 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin # 刪除不能登陸的用戶,即 /sbin/nologin [root@es01 shell]# sed -i '/\/sbin\/nologin/d' passwd [root@es01 shell]# cat passwd root:x:0:0:root:/root:/bin/bash sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt ajie:x:1000:1000:ajie:/home/ajie:/bin/bash elasticsearch:x:1001:1001::/home/elasticsearch:/bin/bash # 刪除以mail開頭一直到以 ftp開頭的行 [root@es01 shell]# sed -i '/^mail/,/^ftp/d' passwd # 在/bin/bash 行後面追加一句話 This is user which can login to system [root@es01 shell]# sed -i '/\/bin\/bash/a This is user which can login to system' passwd [root@es01 shell]# cat passwd root:x:0:0:root:/root:/bin/bash This is user which can login to system 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 nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin ajie:x:1000:1000:ajie:/home/ajie:/bin/bash This is user which can login to system chrony:x:998:996::/var/lib/chrony:/sbin/nologin elasticsearch:x:1001:1001::/home/elasticsearch:/bin/bash This is user which can login to system nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin # 行前追加 在 root 和 nginx之間全部行以前追加 AAAAAAAAAAAAAAAAAAAA [root@es01 shell]# sed -i '/^root/,/^nginx/i AAAAAAAAAAAAAAAAAAAA' passwd [root@es01 shell]# cat passwd AAAAAAAAAAAAAAAAAAAA root:x:0:0:root:/root:/bin/bash AAAAAAAAAAAAAAAAAAAA This is user which can login to system AAAAAAAAAAAAAAAAAAAA bin:x:1:1:bin:/bin:/sbin/nologin AAAAAAAAAAAAAAAAAAAA daemon:x:2:2:daemon:/sbin:/sbin/nologin AAAAAAAAAAAAAAAAAAAA adm:x:3:4:adm:/var/adm:/sbin/nologin AAAAAAAAAAAAAAAAAAAA lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin AAAAAAAAAAAAAAAAAAAA sync:x:5:0:sync:/sbin:/bin/sync AAAAAAAAAAAAAAAAAAAA shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown AAAAAAAAAAAAAAAAAAAA halt:x:7:0:halt:/sbin:/sbin/halt AAAAAAAAAAAAAAAAAAAA nobody:x:99:99:Nobody:/:/sbin/nologin AAAAAAAAAAAAAAAAAAAA systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin AAAAAAAAAAAAAAAAAAAA dbus:x:81:81:System message bus:/:/sbin/nologin AAAAAAAAAAAAAAAAAAAA polkitd:x:999:998:User for polkitd:/:/sbin/nologin AAAAAAAAAAAAAAAAAAAA sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin AAAAAAAAAAAAAAAAAAAA postfix:x:89:89::/var/spool/postfix:/sbin/nologin AAAAAAAAAAAAAAAAAAAA ajie:x:1000:1000:ajie:/home/ajie:/bin/bash AAAAAAAAAAAAAAAAAAAA This is user which can login to system AAAAAAAAAAAAAAAAAAAA chrony:x:998:996::/var/lib/chrony:/sbin/nologin AAAAAAAAAAAAAAAAAAAA elasticsearch:x:1001:1001::/home/elasticsearch:/bin/bash AAAAAAAAAAAAAAAAAAAA This is user which can login to system AAAAAAAAAAAAAAAAAAAA nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin # 查找文件中有root的行,讀取 list 的內容追加進去 [root@es01 shell]# sed -i '/root/r list' passwd [root@es01 shell]# cat passwd root:x:0:0:root:/root:/bin/bash First Line(XXXXXXXXXXXXXXXX) Second Line(XXXXXXXXXXXXXX) 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 First Line(XXXXXXXXXXXXXXXX) Second Line(XXXXXXXXXXXXXX) 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 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin ajie:x:1000:1000:ajie:/home/ajie:/bin/bash chrony:x:998:996::/var/lib/chrony:/sbin/nologin elasticsearch:x:1001:1001::/home/elasticsearch:/bin/bash nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin # 將匹配到的 /bin/bash 行寫入到 /tmp/user_login.txt 文件中 [root@es01 shell]# sed '/\/bin\/bash/w /tmp/user_login.txt' 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 nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin ajie:x:1000:1000:ajie:/home/ajie:/bin/bash chrony:x:998:996::/var/lib/chrony:/sbin/nologin elasticsearch:x:1001:1001::/home/elasticsearch:/bin/bash nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin [root@es01 shell]# cat /tmp/user_login.txt root:x:0:0:root:/root:/bin/bash ajie:x:1000:1000:ajie:/home/ajie:/bin/bash elasticsearch:x:1001:1001::/home/elasticsearch:/bin/bash sed 中的修改操做 7.匹配修改 s/pattern/string s/pattern/string/g s/pattern/string/2g s/pattern/string/ig # passwd小寫 /bin/bash 所有替換爲/BIN/BASH [root@localhost shell]# cp /etc/passwd ./ [root@localhost shell]# sed -i 's/\/bin\/bash/\/BIN\/BASH/g' passwd [root@localhost shell]# [root@localhost shell]# cat 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 nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin ajie:x:1000:1000:ajie:/home/ajie:/BIN/BASH chrony:x:998:996::/var/lib/chrony:/sbin/nologin deploy:x:1001:1001::/home/deploy:/BIN/BASH nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin # 只替換第一個root爲ROOT [root@localhost shell]# sed -i 's/root/ROOT/' passwd [root@localhost shell]# [root@localhost shell]# more 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 nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin ajie:x:1000:1000:ajie:/home/ajie:/bin/bash chrony:x:998:996::/var/lib/chrony:/sbin/nologin deploy:x:1001:1001::/home/deploy:/bin/bash nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin # 只替換 一行的第二個 [root@localhost shell]# sed -i 's/HADOOP/hadoop/2' str.txt [root@localhost shell]# cat str.txt HADOOP is a bigdata frame hadoop HADOOP Spark HADOOP Kafka Skill on HADOOP Paper OF HADOOP Google HADOOP # 從一行的第二個符號條件的字符開始替換 [root@localhost shell]# sed -i 's/HADOOP/hadoop/2g' str.txt [root@localhost shell]# cat str.txt HADOOP is a bigdata frame hadoop Spark HADOOP Kafka Skill on HADOOP Paper OF HADOOP Google HADOOP # 顯示符合內容的行號,顯示包含/sbin/nologin的行號 [root@localhost shell]# sed -n '/\/sbin\/nologin/=' passwd 2 3 4 5 9 10 11 12 13 14 15 16 17 18 20 22 [root@localhost shell]# cat 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 nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin ajie:x:1000:1000:ajie:/home/ajie:/bin/bash chrony:x:998:996::/var/lib/chrony:/sbin/nologin deploy:x:1001:1001::/home/deploy:/bin/bash nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin 反向引用: [root@localhost shell]# cat str.txt hadAAps is a bigdata frame Spark hadBBp Kafka Skill on hadCCp Paper OF hadDDp Google hadEEp # 將hadXXp替換爲hadoops [root@localhost shell]# sed -i 's/had..p/hadoops/g' str.txt [root@localhost shell]# cat str.txt hadoops is a bigdata frame Spark hadoops Kafka Skill on hadoops Paper OF hadoops Google hadoops # [root@localhost shell]# cat str.txt hadAAps is a bigdata frame Spark hadBBp Kafka Skill on hadCCp Paper OF hadDDp Google hadEEp # 不改變原來結構的狀況下加s # & 表示匹配前面查找到的內容 [root@localhost shell]# sed -i 's/had..p/&s/g' str.txt [root@localhost shell]# cat str.txt hadAApss is a bigdata frame Spark hadBBps Kafka Skill on hadCCps Paper OF hadDDps Google hadEEps # \1 也能夠表示前面匹配到的內容 [root@localhost shell]# sed -i 's/\(had..ps\)/\1R/g' str.txt [root@localhost shell]# cat str.txt hadAApsR is a bigdata frame Spark hadBBpsR Kafka Skill on hadCCp Paper OF hadDDpsR Google hadEEpsR # 定義變量的時候若是使用單引號 ' 不會進行替換,注意須要使用雙引號"$var" [root@localhost shell]# cat str.txt hadoop is a bigdata frame Spark hadoop Kafka Skill on hadoop Paper OF hadoop Google hadoop [root@localhost shell]# cat examp.sh #!/bin/bash # old_str=hadoop new_str=HADOOP sed -i 's/$old_str/$new_str/g' str.txt [root@localhost shell]# sh examp.sh [root@localhost shell]# cat str.txt hadoop is a bigdata frame Spark hadoop Kafka Skill on hadoop Paper OF hadoop Google hadoop
相關文章
相關標籤/搜索