2019年4月18日 星期四

【LINUX】SHELL編程的sed說明及範例

SED
選項與參數:
-n:打印。在一般sed的用法中,所有來自STDIN的數據一般都會被列出到終端上。但如果加上-n參數後,則只有經過sed特殊處理的那一行(或者動作)才會被列出來。
-e:直接在命令列模式上進行sed 的動作編輯;
-f:直接將sed的動作寫在一個文件內,-f 則可以運行filename內的sed 動作
-rsed 的動作支持的是延伸型正規表示法的語法。(默認是基礎正規表示法語法)
-i:直接修改讀取的文件內容,而不是輸出到終端。
某文件sed.txt內容如下,共三行
my name is rosalie
hello
hihi
參數範例
[root@rosalie shell]# sed -n "/rosalie/p" sed.txt
my name is rosalie

說明:-n打印要搭配p打印文件sed.txt內的,有rosalie的行

[root@rosalie shell]# sed -n "2p" sed.txt
hello

說明:打印,1p第一行、2p即第二行以此類推

[root@rosalie shell]# sed -n "1,3p" sed.txt
my name is rosalie
hello
hihi

說明:打印,1到3行,即1,3p

功能: s:取代,可以直接進行取代的工作哩!通常這個s的動作可以搭配正規表示法!例如s/old/new/g就是啦!
i:插入,i的後面可以接字串,而這些字串會在新的一行出現(目前的上一行)
a:新增,a的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)
c:取代,c的後面可以接字串,這些字串可以取代n1,n2之間的行!
d:刪除,因為是刪除啊,所以d後面通常不接任何咚咚
p:列印,亦即將某個選擇的數據印出。通常p會與參數sed -n 一起運行~

範例:
[root@rosalie shell]# echo "my name is rosalie" | sed 's/^/& /g'
 my name is rosalie

說明:s/舊/新/g 取代 /^空白 /&添加  後面空一格,指加入空字串-(指在在my name is rosalie前加一個空格)
[root@rosalie shell]# echo "my name is rosalie" | sed '/rosalie/i######'
#######
my name is rosalie

說明:/i在目前的上一行插入-(指在字串rosalie的上一行插入#######)

[root@rosalie shell]# echo "my name is rosalie" | sed '/rosalie/a@@@@@@'
my name is rosalie
@@@@@@@

說明:/a在目前的下一行插入-(指在字串rosalie的上一行插入@@@@@@@)
其他範例:(需求是把文件內192字段全部更改為162)
文件test.txt內容如下:
[root@rosalie ~]# cat test.txt
192.168.1.1
192.168.1.2
192.168.2.22
若LINUX下用VI編輯修改的話 
[root@rosalie ~]# vi test.txt
192.168.1.1
192.168.1.2
192.168.2.22

:%s/168/162/          (按下ENTER)

[root@rosalie-mysql01 ~]# cat test.txt  (168都會變成162)

sed命令修改替換
sed -i 's/168/162/g' test.txt
也可以達到修改的效果
其他範例:
文件內容排序不一,想所有的字串以空格分開一行一行呈現
[root@rosalie shell]# cat sed.txt
my name is rosalie
hello
hihi  khkgs ojiowjoi kgjksss
aaghks kgjhks kkkll
gggg
sgsgs
hgsk

[root@rosalie-mysql01 shell]# cat sed.txt | sed "s/ /\n/g" |grep -v "^$"|sort
aaghks
gggg
hello
hgsk
hihi
is
kgjhks
kgjksss
khkgs
kkkll
my
name
ojiowjoi
rosalie
sgsgs
說明:例如s取代功能"s/ /\n/g" 黃色是搜尋到的字串即空白,取代\n紅色表示這是指換行的意思,grep -v "^$"是避免文件內還有空白符號,故篩選掉空白,sort是用來排序的(在sort後加 -nr則反排)

[root@rosalie shell]# cat sed.txt | sed "s/ /\n/g" |grep -v "^$"| sort | sed -n '1p;$p'
aaghks
sgsgs
說明:打印第一及$表示最後一列

沒有留言:

張貼留言

【MYSQL】MYSQL的SYS表說明(版本8.0)

mysql> use sys Reading table information for completion of table and column names You can turn off this feature to get a quicker s...