把sed當作命令直譯器使用

2021-09-08 05:43:37 字數 2750 閱讀 7906

[root@sishen ~]# vim script.sed

#!/bin/sed -f

#交換第一列和第二列

s/\([^,]*\),\([^,]*\),\(.*\).*/\2,\1, \3/g

#把整行內容放入<>中

s/^.*/<&>/

#把developer替換為it manager

s/developer/it manager/

#把manager替換為directory

s/manager/directory/

新增可執行許可權

[root@sishen ~]# chmod u+x script.sed

[root@sishen ~]# ./script.sed employee.txt

使用-n遮蔽預設輸出

[root@sishen ~]# vim sc.sed

#!/bin/sed -nf

/root/ p

/nobody/ p

/mail/ p

[root@sishen ~]# chmod +x sc.sed

[root@sishen ~]# ./sc.sed /etc/passwd

root:x:0:0:root:/root:/bin/bash

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

nobody:x:99:99:nobody:/:/sbin/nologin

nfsnobody:x:65534:65534:anonymous nfs user:/var/lib/nfs:/sbin/nologin

下面來測試下是否加-n,結果會如何

[root@sishen ~]# ./sc.sed /etc/passwd

root:x:0:0:root:/root:/bin/bash

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

[root@sishen ~]# vim sc.sed

#!/bin/sed -fn

/root/ p

/nobody/ p

/mail/ p

[root@sishen ~]# ./sc.sed /etc/passwd

/bin/sed: couldn't open file n: no such file or directory

-nf一定不能寫反

注意:無論引數有多少個,引數順序如何,引數f後面必須接檔名

直接修改輸入檔案

前面提到sed預設不會修改輸入檔案,它只會把輸出列印到標準輸出上,當想儲存結果時,把輸出重定向到檔案(或使用w命令)

[root@sishen ~]# cp employee.txt employee1.txt #先備份一下

[root@sishen ~]# sed 's/john/johnny/' employee.txt > new-employee.txt

[root@sishen ~]# mv new-employee.txt employee.txt

mv: overwrite `employee.txt'? y

使用-i選項可以直接修改輸入檔案

[root@sishen ~]# sed -i 's/john/johnny/' employee.txt

[root@sishen ~]# cat employee.txt

101,johnnyny doe,ceo

102,jason smith,it manager

103,raj reddy,sysadmin

104,anand ram,developer

105,jane miller,sales manager

#106,jane miller,sales manager

#107,jane miller,sales manager

[root@sishen ~]# sed -ibak 's/john/johnny/' employee.txt

[root@sishen ~]# ls | grep ^em

employee.txt

employee.txtbak

注意:-i後面可以接任意乙個字串或數字並非一定要是bak

還有另外一種寫法效果一樣

posted on 2016-11-14 11:56收藏

把指標當作動態陣列使用

是陣列就會有bai長度限制的,你可du以用指標動態分配乙個陣列 例如 int array 定義指zhi針 int size 陣列的大小dao cin size 輸入陣列大小 array new int size c 的方式動態分配陣列 array int malloc size sizeof int...

sed命令使用

sed命令使用 常用選項 n 使用安靜模式,在一般情況所有的 stdin 都會輸出到螢幕上,加入 n 後只列印被 sed 特殊處理的行 e 多重編輯,且命令順序會影響結果 f 指定乙個 sed 指令碼檔案到命令列執行,r sed 使用擴充套件正則 i 直接修改文件讀取的內容,不在螢幕上輸出 sed操...

sed命令使用

常用選項 n 使用安靜模式,在一般情況所有的 stdin 都會輸出到螢幕上,加入 n 後只列印被 sed 特殊處理的行 e 多重編輯,且命令順序會影響結果 f 指定乙個 sed 指令碼檔案到命令列執行,r sed 使用擴充套件正則 i 直接修改文件讀取的內容,不在螢幕上輸出 sed操作命令 sed ...