linux指令碼中利用sed修改檔案內容
常用命令功能
a插入,在當前行後新增一行或多行。多行時需要在每行末尾需用「\」續行(最後不需要)
c替換,用此符號後的新文字替換當前行中的文字。多行時需要在每行末尾需用「\」續行(最後不需要)
d刪除,刪除行
i插入,在當前行之前插入文字。多行時需要在每行末尾需用「\」續行(最後不需要)
h拷貝模板塊的內容到記憶體中的緩衝區
g獲得記憶體緩衝區的內容,並替代當前模板塊中的文字
l列出非列印字元
n讀入下一輸入行,並從下一條命令而不是第一條命令開始對其的處理
p列印行
q結束或退出sed
r從檔案中讀取輸入行
!對所選行以外的所有行應用命令
s替換,用乙個字串替換另乙個。通常和正規表示式搭配使用:1,$ s/old/new/g
g在行內進行全域性替換
w將所選的行寫入檔案
x交換暫存緩衝區與模式空間的內容
y將字元替換為另一字元(不能對正規表示式使用y命令)
常用選項功能
-e進行多項編輯,即對輸入行應用多條sed命令時使用
-n取消預設的輸出,使用安靜(silent)模式。在一般 sed 的用法中,所有來自 stdin的資料一般都會被列出到螢幕上。但如果加上 -n 引數後,則只有經過sed 特殊處理的那一行(或者動作)才會被列出來
-f指定sed指令碼的檔名
-i 直接修改讀取的檔案內容,而不是由螢幕輸出
-r sed的動作支援的是延伸型正規表示式的語法,想少用\ 那你就用-r
[root@localhost test]# ls
test.sh
[root@localhost test]# vim test.sh
#!/bin/sh
[root@localhost test]# ./test.sh
please use: ./test.sh
[root@localhost test]# ./test.sh 1.1.1.1
[root@localhost test]# cat a.conf
#config file
aaa_add_info_into_line2
ipaddr:1.1.1.1
mask:24 #or 255.255.255.0 is valid.
ccc_add_info_into_file_after_the_fix_line
pro:ipv4
bbb_add_info_into_the_last_line
[root@localhost test]#
[root@localhost test]#./test.sh 2.2.2.2
[root@localhost test]#
[root@localhost test]# cat a.conf
#config file
aaa_add_info_into_line2
ipaddr:2.2.2.2
mask:24 #or 255.255.255.0 is valid. #or 255.255.255.0 is valid.
ccc_add_info_into_file_after_the_fix_line
ccc_add_info_into_file_after_the_fix_line
pro:ipv4
bbb_add_info_into_the_last_line
bbb_add_info_into_the_last_line
[root@localhost test]#
如果要替換一行中的某個字串:
sed[root@localhost test]# cat test.sh
#!/bin/sh
file="a.conf"
sed -i "/bin\/mysqld\ \-\-initialize/s/\-\-basedir=[^ ]*\ /\-\-basedir=\/usr\/local\/mysql\ /g" $file
[root@localhost test]#
[root@localhost test]# cat a.conf
bin/mysqld --initialize
--user=mysql
--basedir=/abc/def
--datadir=/usr/***/yyy >> /home/a.txt
tomcat --basedir=/opt/tomcat/ ***x
[root@localhost test]#
[root@localhost test]# ./test.sh
[root@localhost test]#
[root@localhost test]# cat a.conf
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/***/yyy >> /home/a.txt
tomcat --basedir=/opt/tomcat/ ***x
[root@localhost test]#
替換一行中的一部分(非整行)
sed 's/被替換的字串/新的字串/g'
表示式支援正則
替換匹配行中的某個字串
sed -i '/匹配字串/s/替換源字串/替換目標字串/g' $file
# sed -i "/bin\/mysqld\ \-\-initialize/s/\-\-basedir=[^ ]*\ /\-\-basedir=\/usr\/local\/mysql\ /g" $file
# sed -n '/abc/p' $file | sed 's/abc/newabc/g'
# sed -n '/abc/p' $file | sed 's/abc//g'
直接在檔案末尾插入一行內容"end"
# sed -i '$a end' $file
替換單引號的幾種方法:
sed 's/'"'"'//g'
orsed 's/'\''//g'
orsed s/\'//g
Linux利用sed批量修改檔名
初始檔名 ls lh total 5.5g rw r r 1 root root 193k sep 28 09 38 20180908.txt drwxr xr x 2 root root 4.0k mar 7 16 37 batch rw r r 1 root root 160m mar 13 1...
linux下shell指令碼中sed命令使用變數
用linpack做測試,寫了乙個指令碼,因為每次可修改的引數寫在了配置檔案裡,所以指令碼裡用sed命令來修改配置檔案 測試次數 echo input number of tests read numt 每次測試的資料規模,測試次數有多少次,這裡應該又多少組數字,中間以空格隔開 echo input ...
shell指令碼利用sed命令分割檔案
前幾天有個需求,網路模組5秒定時傳回領區資訊並寫入檔案,需求為5分鐘後讀取檔案,提取每次傳回的領區資訊中的earfcn和rsrp等,每次傳回的資訊以 為分隔符 檔案格式如下 領區資訊.領區資訊.領區資訊.領區資訊.領區資訊.提取資訊前要先把每5秒傳回的資訊分割,然後再提取,所以就寫了一下的指令碼來提...