最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

shell腳本--sed的用法詳解

 更新時(shí)間:2020年12月09日 11:41:50   作者:wdz306ling  
這篇文章主要介紹了shell腳本--sed的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

sed在處理文本時(shí)是逐行讀取文件內(nèi)容,讀到匹配的行就根據(jù)指令做操作,不匹配就跳過

sed是Linux下一款功能強(qiáng)大的非交互流式文本編輯器,可以對(duì)文本文件進(jìn)行增、刪、改、查等操作,支持按行、按字段、按正則匹配文本內(nèi)容,靈活方便,特別適合于大文件的編輯。本文主要介紹sed的一些基本用法,并通過shell腳本演示sed的使用實(shí)例。

1.sed的使用方法,調(diào)用sed 命令的語(yǔ)法有兩種:

一.在命令行指定sed指令對(duì)文本進(jìn)行處理:sed +選項(xiàng)  ‘指令' 文件

二.先將sed指令保存到文件中,將該文件作為參數(shù)進(jìn)行調(diào)用:sed   +選項(xiàng)  -f  包含sed指令的文件  文件

sed的常用選項(xiàng):

-r:使用擴(kuò)展正則表達(dá)式

-e:它告訴sed將下一個(gè)參數(shù)解釋為一個(gè)sed指令,只有當(dāng)命令行上給出多個(gè)sed指令時(shí)才需要使用-e選項(xiàng)

-f:后跟保存了sed指令的文件

-i:直接對(duì)內(nèi)容進(jìn)行修改,不加-i時(shí)默認(rèn)只是預(yù)覽,不會(huì)對(duì)文件做實(shí)際修改

-n:取消默認(rèn)輸出,sed默認(rèn)會(huì)輸出所有文本內(nèi)容,使用-n參數(shù)后只顯示處理過的行

sed中的編輯命令:

a:追加  向匹配行后面插入內(nèi)容

c:更改  更改匹配行的內(nèi)容

i:插入  向匹配行前插入內(nèi)容

d:刪除  刪除匹配的內(nèi)容

s:替換  替換掉匹配的內(nèi)容

p:打印  打印出匹配的內(nèi)容,通常與-n選項(xiàng)和用

=:用來打印被匹配的行的行號(hào)

n:讀取下一行,遇到n時(shí)會(huì)自動(dòng)跳入下一行

r,w:讀和寫編輯命令,r用于將內(nèi)容讀入文件,w用于將匹配內(nèi)容寫入到文件

2.sed命令實(shí)例:

示例1:向文件中添加或插入行

sed '3ahello' 1.txt #向第三行后面添加hello,3表示行號(hào)

sed '/123/ahello' 1.txt #向內(nèi)容123后面添加hello,如果文件中有多行包括123,則每一行后面都會(huì)添加

sed '$ahello' 1.txt #在最后一行添加hello

sed '3ihello' 1.txt #在第三行之前插入hello

sed '/123/ihello' 1.txt #在包含123的行之前插入hello,如果有多行包含123,則包含123的每一行之前都會(huì)插入hello

sed '$ihello' 1.txt #在最后一行之前插入hello

示例2:更改文件中指定的行

sed '1chello' 1.txt #將文件1.txt的第一行替換為hello

sed '/123/chello' 1.txt #將包含123的行替換為hello

sed '$chello' 1.txt #將最后一行替換為hello

示例3:刪除文件中的行

sed '4d' 1.txt #刪除第四行

sed '1~2d' 1.txt #從第一行開始刪除,每隔2行就刪掉一行,即刪除奇數(shù)行

sed '1,2d' 1.txt #刪除1~2行

sed '1,2!d' 1.txt #刪除1~2之外的所有行

sed '$d' 1.txt #刪除最后一行

sed '/123/d' 1.txt #刪除匹配123的行

sed '/123/,$d' 1.txt #刪除從匹配123的行到最后一行

sed '/123/,+1d' 1.txt #刪除匹配123的行及其后面一行

sed '/^$/d' 1.txt #刪除空行

sed '/123\|abc/!d' 1.txt #刪除不匹配123或abc的行,/123\|abc/ 表示匹配123或abc ,!表示取反

sed '1,3{/123/d}' 1.txt #刪除1~3行中,匹配內(nèi)容123的行,1,3表示匹配1~3行,{/123/d}表示刪除匹配123的行

示例4:替換文件中的內(nèi)容

sed 's/123/hello/' 1.txt #將文件中的123替換為hello,默認(rèn)只替換每行第一個(gè)123

sed 's/123/hello/g' 1.txt #將文本中所有的123都替換為hello

sed 's/123/hello/2' 1.txt #將每行中第二個(gè)匹配的123替換為hello

sed -n 's/123/hello/gpw 2.txt' 1.txt #將每行中所有匹配的123替換為hello,并將替換后的內(nèi)容寫入2.txt

sed '/#/s/,.*//g' 1.txt #匹配有#號(hào)的行,替換匹配行中逗號(hào)后的所有內(nèi)容為空 (,.*)表示逗號(hào)后的所又內(nèi)容

sed 's/..$//g' 1.txt #替換每行中的最后兩個(gè)字符為空,每個(gè)點(diǎn)代表一個(gè)字符,$表示匹配末尾 (..$)表示匹配最后兩個(gè)字符

sed 's/^#.*//' 1.txt #將1.txt文件中以#開頭的行替換為空行,即注釋的行 ( ^#)表示匹配以#開頭,(.*)代表所有內(nèi)容

sed 's/^#.*//;/^$/d' 1.txt #先替換1.txt文件中所有注釋的空行為空行,然后刪除空行,替換和刪除操作中間用分號(hào)隔開

sed 's/^[0-9]/(&)/' 1.txt #將每一行中行首的數(shù)字加上一個(gè)小括號(hào) (^[0-9])表示行首是數(shù)字,&符號(hào)代表匹配的內(nèi)容
#或者
sed 's/\(^[0-9]\)/(\1)/' 1.txt #替換左側(cè)特殊字符需鑰轉(zhuǎn)義,右側(cè)不需要轉(zhuǎn)義,\1代表匹配的內(nèi)容

sed 's/$/&'haha'/' 1.txt # 在1.txt文件的每一行后面加上"haha"字段

示例5:打印文件中的行

sed -n '3p' 1.txt #打印文件中的第三行內(nèi)容

sed -n '2~2p' 1.txt #從第二行開始,每隔兩行打印一行,波浪號(hào)后面的2表示步長(zhǎng)

sed -n '$p' 1.txt #打印文件的最后一行

sed -n '1,3p' 1.txt #打印1到3行

sed -n '3,$p' 1.txt #打印從第3行到最后一行的內(nèi)容

sed -n '/you/p' 1.txt #逐行讀取文件,打印匹配you的行

sed -n '/bob/,3p' 1.txt #逐行讀取文件,打印從匹配bob的行到第3行的內(nèi)容

sed -n '/you/,3p' 1.txt #打印匹配you 的行到第3行,也打印后面所有匹配you 的行

sed -n '1,/too/p' 1.txt #打印第一行到匹配too的行
sed -n '3,/you/p' 1.txt #只打印第三行到匹配you的行

sed -n '/too/,$p' 1.txt #打印從匹配too的行到最后一行的內(nèi)容

sed -n '/too/,+1p' 1.txt #打印匹配too的行及其向后一行,如果有多行匹配too,則匹配的每一行都會(huì)向后多打印一行

sed -n '/bob/,/too/p' 1.txt #打印從匹配內(nèi)容bob到匹配內(nèi)容too的行

示例6:打印文件的行號(hào)

sed -n "$=" 1.txt #打印1.txt文件最后一行的行號(hào)(即文件有多少行,和wc -l 功能類似)

sed -n '/error/=' 1.txt #打印匹配error的行的行號(hào)
sed -n '/error/{=;p}' 1.txt #打印匹配error的行的行號(hào)和內(nèi)容(可用于查看日志中有error的行及其內(nèi)容)

示例7:從文件中讀取內(nèi)容

sed 'r 2.txt' 1.txt #將文件2.txt中的內(nèi)容,讀入1.txt中,會(huì)在1.txt中的每一行后都讀入2.txt的內(nèi)容

sed '3r 2.txt' 1.txt #在1.txt的第3行之后插入文件2.txt的內(nèi)容(可用于向文件中插入內(nèi)容)

sed '/245/r 2.txt' 1.txt #在匹配245的行之后插入文件2.txt的內(nèi)容,如果1.txt中有多行匹配456則在每一行之后都會(huì)插入

sed '$r 2.txt' 1.txt #在1.txt的最后一行插入2.txt的內(nèi)容

示例8:向文件中寫入內(nèi)容

sed -n 'w 2.txt' 1.txt #將1.txt文件的內(nèi)容寫入2.txt文件,如果2.txt文件不存在則創(chuàng)建,如果2.txt存在則覆蓋之前的內(nèi)容

sed -n '2w 2.txt' 1.txt #將文件1.txt中的第2行內(nèi)容寫入到文件2.txt

sed -n -e '1w 2.txt' -e '$w 2.txt' 1.txt #將1.txt的第1行和最后一行內(nèi)容寫入2.txt
sed -n -e '1w 2.txt' -e '$w 3.txt' 1.txt #將1.txt的第1行和最后一行分別寫入2.txt和3.txt

sed -n '/abc\|123/w 2.txt' 1.txt #將1.txt中匹配abc或123的行的內(nèi)容,寫入到2.txt中

sed -n '/666/,$w 2.txt' 1.txt #將1.txt中從匹配666的行到最后一行的內(nèi)容,寫入到2.txt中

sed -n '/xyz/,+2w 2.txt' 1.txt #將1.txt中從匹配xyz的行及其后2行的內(nèi)容,寫入到2.txt中

示例9:sed 在shell腳本中的使用

實(shí)例1:替換文件中的內(nèi)容

#!/bin/bash
if [ $# -ne 3 ];then  #判斷參數(shù)個(gè)數(shù)
 echo "Usage: $0 old-part new-part filename" #輸出腳本用法
 exit
fi
sed -i "s#$1#$2#" $3  #將 舊內(nèi)容進(jìn)行替換,當(dāng)$1和$2中包含"/"時(shí),替換指令中的定界符需要更換為其他符號(hào)

實(shí)例2:刪除文件中的空白行

#!/bin/bash
if [ ! -f $1 ];then  #判斷參數(shù)是否為文件且存在
 echo "$0 is not a file"
 exit
fi
sed -i "/^$/d" $1 #將空白行刪除

實(shí)例3:格式化文本內(nèi)容

#!/bin/bash
a='s/^ *>// #定義一個(gè)變量a保存sed指令,'s/^ *>//':表示匹配以0個(gè)或多空格開頭緊跟一個(gè)'>'號(hào)的行,將匹配內(nèi)容替換
s/\t*//   #'s/\t*//':表示匹配以0個(gè)或多個(gè)制表符開頭的行,將匹配內(nèi)容替換
s/^>//  #'s/^>//' :表示匹配以'>'開頭的行,將匹配內(nèi)容替換
s/^ *//'  #'s/^ *//':表示匹配以0個(gè)或多個(gè)空格開頭的行,將匹配內(nèi)容替換
#echo $a
sed "$a" $1 #對(duì)用戶給定的文本文件進(jìn)行格式化處理

實(shí)用腳本:批量更改當(dāng)前目錄中的文件后綴名:

示例1:

#!/bin/bash
if [ $# -ne 2 ];then  #判斷用戶的輸入,如果參數(shù)個(gè)數(shù)不為2則打印腳本用法
 echo "Usage:$0 + old-file new-file"
 exit
fi
for i in *$1*    #對(duì)包含用戶給定參數(shù)的文件進(jìn)行遍歷
do
 if [ -f $i ];then
 iname=`basename $i` #獲取文件名
 newname=`echo $iname | sed -e "s/$1/$2/g"`  #對(duì)文件名進(jìn)行替換并賦值給新的變量
 mv $iname $newname  #對(duì)文件進(jìn)行重命名
 fi
done
exit 666

示例2:

#!/bin/bash
read -p "input the old file:" old #提示用戶輸入要替換的文件后綴
read -p "input the new file:" new
[ -z $old ] || [ -z $new ] && echo "error" && exit #判斷用戶是否有輸入,如果沒有輸入怎打印error并退出
for file in `ls *.$old`
do
 if [ -f $file ];then
 newfile=${file%$old}   #對(duì)文件進(jìn)行去尾
 mv $file ${newfile}$new   #文件重命名
 fi
done

示例3:

#!/bin/bash

if [ $# -ne 2 ];then #判斷位置變量的個(gè)數(shù)是是否為2
 echo "Usage:$0 old-file new-file"
 exit
fi
for file in `ls`   #在當(dāng)前目錄中遍歷文件
do
 if [[ $file =~ $1$ ]];then #對(duì)用戶給出的位置變量$1進(jìn)行正則匹配,$1$表示匹配以變量$1的值為結(jié)尾的文件
 echo $file   #將匹配項(xiàng)輸出到屏幕進(jìn)行確認(rèn)
 new=${file%$1}  #對(duì)文件進(jìn)行去尾處理,去掉文件后綴保留文件名,并將文件名賦給變量new   
 mv $file ${new}$2  #將匹配文件重命名為:文件名+新的后綴名
 fi

done

示例4:使用sed匹配文件中的IP地址

sed -nr '/([0-9]{1,3}\.){3}([0-9]{1,3})/p' 1.txt

到此這篇關(guān)于shell腳本--sed的用法詳解的文章就介紹到這了,更多相關(guān)shell --sed內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Shell全局變量、局部變量與特殊變量的具體使用

    Shell全局變量、局部變量與特殊變量的具體使用

    本文主要介紹了Shell全局變量、局部變量與特殊變量的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Shell條件語(yǔ)句(條件測(cè)試、if語(yǔ)句、case語(yǔ)句)

    Shell條件語(yǔ)句(條件測(cè)試、if語(yǔ)句、case語(yǔ)句)

    本文主要介紹了Shell條件語(yǔ)句(條件測(cè)試、if語(yǔ)句、case語(yǔ)句),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Shell腳本實(shí)現(xiàn)硬盤空間和表空間的使用情況統(tǒng)計(jì)并郵件通知

    Shell腳本實(shí)現(xiàn)硬盤空間和表空間的使用情況統(tǒng)計(jì)并郵件通知

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)硬盤空間和表空間的使用情況統(tǒng)計(jì)并郵件通知,其中表空間是指oracle數(shù)據(jù)庫(kù)里的表空間,需要的朋友可以參考下
    2014-12-12
  • 什么是Shell?Shell腳本基礎(chǔ)知識(shí)詳細(xì)介紹

    什么是Shell?Shell腳本基礎(chǔ)知識(shí)詳細(xì)介紹

    這篇文章主要介紹了什么是Shell?Shell腳本基礎(chǔ)知識(shí)介紹,本文是一篇Shell腳本入門文章,在本文你可學(xué)到什么是Shell、有多少種Shell、一個(gè)Shell腳本代碼實(shí)例,需要的朋友可以參考下
    2014-07-07
  • Shell實(shí)現(xiàn)的Oracle啟動(dòng)腳本分享

    Shell實(shí)現(xiàn)的Oracle啟動(dòng)腳本分享

    這篇文章主要介紹了Shell實(shí)現(xiàn)的Oracle啟動(dòng)腳本分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-01-01
  • Shell腳本實(shí)現(xiàn)的memcached進(jìn)程監(jiān)控

    Shell腳本實(shí)現(xiàn)的memcached進(jìn)程監(jiān)控

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)的memcached進(jìn)程監(jiān)控,實(shí)現(xiàn)功能為監(jiān)控memcached進(jìn)程是否存在,不存在則啟動(dòng)memcached并重載nginx,需要的朋友可以參考下
    2014-07-07
  • Shell逐行讀取文件的4種方法

    Shell逐行讀取文件的4種方法

    這篇文章主要介紹了Shell逐行讀取文件的4種方法,本文介紹了while循環(huán)法、重定向法、管道法、文件描述符法等一些方法,需要的朋友可以參考下
    2014-12-12
  • Linux?中的export與alias命令詳解

    Linux?中的export與alias命令詳解

    export和alias都是用來簡(jiǎn)化命令行輸入的工具。export用于設(shè)置環(huán)境變量,環(huán)境變量是一些系統(tǒng)級(jí)別的變量,用于指定一些系統(tǒng)的默認(rèn)值或者搜索路徑等,這篇文章主要介紹了Linux?中的export與alias命令,需要的朋友可以參考下
    2023-04-04
  • shell SNAT與DNAT的使用與區(qū)別

    shell SNAT與DNAT的使用與區(qū)別

    本文主要介紹了shell SNAT與DNAT的使用與區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Linux shell腳本編程if語(yǔ)句的使用方法(條件判斷)

    Linux shell腳本編程if語(yǔ)句的使用方法(條件判斷)

    這篇文章主要介紹了Linux shell腳本編程if語(yǔ)句的使用方法,大家參考使用吧
    2013-12-12

最新評(píng)論

尉犁县| 平陆县| 宜都市| 上虞市| 定日县| 定西市| 新干县| 友谊县| 兴仁县| 遂川县| 海淀区| 文山县| 蕲春县| 黄浦区| 云安县| 樟树市| 子长县| 遂昌县| 洪江市| 永寿县| 阿城市| 祁阳县| 永城市| 龙泉市| 怀宁县| 万荣县| 宁城县| 永嘉县| 大邑县| 临洮县| 勐海县| 定结县| 明水县| 左云县| 卢湾区| 大同市| 扎鲁特旗| 乌兰察布市| 乐东| 无锡市| 镇安县|