網(wǎng)站建設(shè)費(fèi)應(yīng)怎樣做會(huì)計(jì)分錄上海網(wǎng)站搜索引擎優(yōu)化
文章目錄
- 1. 基本功能
- 2.sed替換s
- sed配合grep和管道操作符的例子
- 3.sed中的刪除和添加
- 3.1 d刪除
- 3.2 a i添加
- 添加多行
- 4.sed行替換
- 替換包含某字符的行
- 5.單字符替換 y
- 6. p打印命令
- 打印含有目標(biāo)字符的行
- sed中包含多個(gè)指令,使用{}
- 7.sed w 寫(xiě)入文件
- 8.sed r 讀取文件
- 9.sed q 退出腳本——及時(shí)終止命令執(zhí)行
- 10.綜合實(shí)例
- 批量指令sed指令
1. 基本功能
- 對(duì)文本中的某一行做增刪改查
sed [optionsl'addrcommand[flags]' filename
//addr是指令操作的行,不寫(xiě)默認(rèn)是全部
//command是操作指令,添加、修改等
例如:sed -e '1s/test/trial/g' data.txt
1為地址,表示操作data.txt的第一行;
s為cmd,表示替換;**命令選項(xiàng)**
-e:直接在vim的命令行模式上進(jìn)行sed動(dòng)作編輯,此為默認(rèn)選項(xiàng),缺省也可以。但是文件本身不被修改,只是會(huì)將執(zhí)行后的結(jié)果打印;
-f:將sed的動(dòng)作寫(xiě)在一個(gè)文件內(nèi),用-f filename執(zhí)行filename內(nèi)的sed動(dòng)作;
-i:直接修改文件內(nèi)容;
-n:只打印模式匹配的行;
-r:支持?jǐn)U展表達(dá)式:**sed常用內(nèi)部命令**
a 在匹配后面添加
i 在匹配前面添加
p 打印
d 刪除
S 替換
c 更改
y 轉(zhuǎn)換**flags**
相關(guān)描述參考下圖
2.sed替換s
[address]s/pattern/replacement/flagssed指令只有-i下才會(huì)直接修改文件flag標(biāo)記中的n表示將第幾個(gè)目標(biāo)字符做替換,如果在某一行中只有1個(gè)目標(biāo)字符,則當(dāng)n>1時(shí),替換不生效。
- 如下圖所示,使用p這個(gè)flag的時(shí)候必須配合-n,這樣會(huì)只打印匹配上的行。通常用于原文件行數(shù)過(guò)多,只想看操作的行的時(shí)候。
- 使用w flag,可以將匹配上的行輸出到一個(gè)文件,如下圖所示,輸出到了data1.txt
- 使用反斜線對(duì)特殊字符做轉(zhuǎn)義
sed配合grep和管道操作符的例子
3.sed中的刪除和添加
3.1 d刪除
sed 'd' data.txt
sed d刪除
-所有
sed '3d' data.txt
- 3行
sed'1,3d' data.txt
-1到3行
-sed '2,4d' data.txt
-2到4行
3.2 a i添加
sed a和i添加
sed '3i This is an inserted line.' data.txt
//在第3行前面添加sed '3a This is an appended line. data.txt
//在第3行后面添加
添加多行
sed '1i This is one line of new text.\
This is another line of new text. data.txt
4.sed行替換
sed c行替換
sed '3c This is a changed line of text.' data.txt
//無(wú)視第三行的內(nèi)容,直接進(jìn)行行替換,源文件沒(méi)有被替換,只是打印出來(lái)替換結(jié)果了。
替換包含某字符的行
sed '/number 3/c\
> This is a changed line of text.' data.txt
- 上面將一個(gè)命令拆多行寫(xiě)了,下面是一行完成的。都是將含有number 3字符的行進(jìn)行整行替換
5.單字符替換 y
sed y轉(zhuǎn)換腳本
單個(gè)字符一對(duì)一替換
sed 'y/123/789/" data.txt
- 將123替換為789,雖然123寫(xiě)在了一起,但是也是按照單個(gè)字符處理的,不是按照123三個(gè)字符來(lái)理解。
- 繼續(xù)添加一個(gè)l,也是一樣,不論在什么位置,都會(huì)進(jìn)行單個(gè)字符替換
echo "This 1 is a test of 1 try." | sed 'y/123/456/'
This 4 is a test of 4 try
6. p打印命令
sed -n '/number 3/p' data.txt
用-n選項(xiàng)和p命令配合使用,我們可以禁止輸出其他行,只打印包含匹配文本模式的行。 如果需要在
修改之前查看行,也可以使用打印命令,比如與替換或修改命令一起使用。可以創(chuàng)建一個(gè)腳本在修改行之前顯示該行
打印含有目標(biāo)字符的行
sed中包含多個(gè)指令,使用{}
sed -n '/3/{
>p
>s/line/test/p
> }' data.txt
This is line number 3.
This is test number 3.
查找包含數(shù)字3的行,然后執(zhí)行兩條命令。首先,腳本用p命令來(lái)打印出原始行;然后它用s命令替換文本,并用p標(biāo)記打印出替換結(jié)果。輸出同時(shí)顯示了原來(lái)的行文本和新的行文本
7.sed w 寫(xiě)入文件
sed '1,2w test.txt' data.txt
//將data.txt中的1~2行寫(xiě)入test.txt
//上述指令沒(méi)有-n,還是會(huì)打印data.txt的內(nèi)容sed -n '/demo/w demo.txt' data.txt
//將包含demo的行打印到demo.txt,-n加上就不會(huì)打印無(wú)關(guān)行了。
8.sed r 讀取文件
sed '3r data1.txt' data.txt
sed 命令會(huì)將 filename 文件中的內(nèi)容插入到 address 指定行的后面
sed '$r data1.txt' data.txt 插入到文件末尾
9.sed q 退出腳本——及時(shí)終止命令執(zhí)行
sed '2q' test.txt
- 使用q只打印前2行
sed '/number/{s/number/num/;q}' data.txt
//包含多個(gè)命令用{},多個(gè)命令之間使用;分隔
//帶q則執(zhí)行完一次替換后指令就終止,不帶則會(huì)針對(duì)全部行做替換
10.綜合實(shí)例
sed '1...' data.txt
//直接指定行號(hào)
sed '1,3...' data.txt
//指定行的范圍
sed '1,$...' data.txt
//從某行開(kāi)始到最后一行
sed '/zyr/s/bash/csh/' /etc/passwd
//使用字符匹配,找到包含zyr的行做替換
//使用正則匹配做替換
sed '{s/h[0-9]/\<&\>/1; s/h[0-9]/\<&\>/2}' test.txt
//此處的&在sed語(yǔ)法中表示匹配上的字符本身
//{}表示對(duì)一行內(nèi)容做多個(gè)操作,多個(gè)操作之間使用;分割
- 為了簡(jiǎn)化指令,可以將操作對(duì)象往前提,這樣只寫(xiě)一次就行
其實(shí)sed的指令在vim中都可以使用命令模式直接敲然后回車(chē)執(zhí)行,但是不利用批量指令。
這時(shí)就可以創(chuàng)建一個(gè)sed的腳本來(lái)操作目標(biāo)文本!!
批量指令sed指令
創(chuàng)建sed.sh,將指令寫(xiě)入;使用-f調(diào)用指令腳本
下圖為sed.sh腳本中的內(nèi)容,這樣可以分行寫(xiě),很清晰。