linux bash 的檔案查詢替換 檔案操作
阿新 • • 發佈:2018-12-15
簡介:我現在Mac系統上,有多個版本的hadoop,多個版本的hive,開發的時候需要排列組合。每次都修改配置,很麻煩,所有我想寫個shell指令碼,幫我自動化配置各種版本,主要是對.bash_profile檔案的查詢與替換
1. sed命令
1.1 簡介
1.1.1 刪除:d命令
$ sed '2d' example-----刪除example檔案的第二行。 $ sed '2,$d' example-----刪除example檔案的第二行到末尾所有行。 $ sed '$d' example-----刪除example檔案的最後一行。 $ sed '/test/'d example-----刪除example檔案所有包含test的行。
在看看以前我常寫的sed ‘s/|/,/g’ aaa.txt>bbb.txt 這個的意思就是把aaa.txt檔案中所有字串|都換成,這是怎麼表示的呢?S代表字串,g表示行內全面替換。
1.1.1 替換:s命令
$ sed 's/test/mytest/g' example -----在整行範圍內把test替換為mytest。如果沒有g標記,則只有每行第一個匹配的test被替換成mytest。 $ sed -n 's/^test/mytest/p' example -----(-n)選項和p標誌一起使用表示只打印那些發生替換的行。也就是說,如果某一行開頭的test被替換成mytest,就列印它。 $ sed 's/^192.168.0.1/&localhost/' example -----&符號表示替換換字串中被找到的部份。所有以192.168.0.1開頭的行都會被替換成它自已加 localhost,變成192.168.0.1localhost。 $ sed -n 's/able/\1rs/p' example -----love被標記為1,所有loveable會被替換成lovers,而且替換的行會被打印出來。 $ sed 's#10#100#g' example -----不論什麼字元,緊跟著s命令的都被認為是新的分隔符,所以,“#”在這裡是分隔符,代替了預設的“/”分隔符。表示把所有10替換成100。 cat init.ora | grep -v ^#|grep –v ^* > initprod.ora
2. 典型用法
2.1 sed 查詢某行,關鍵字,並且替換一行
注意這是在mac下的命令,與ceotos下命令差別一點
mac : sed -i ''
centos : sed -i
要操作的行
# hadopp
46行 export HADOOP_HOME=/Users/lcc/soft/hadoop/hadoop-2.7.4
47行 export export HADOOP_HOME=/Users/lcc/soft/hadoop/hadoop-3.0.3.2
命令
[email protected] ~$ sed -i '' '46s/^.*HADOOP_HOME.*$/fff/' /Users/lcc/aa.txt 格式$ sed -i '' '行s/^.*關鍵字.*$/fff/' 檔案全路徑
結果
# hadopp
fff
47行 export export HADOOP_HOME=/Users/lcc/soft/hadoop/hadoop-3.0.3.2
注意:不加行號,會替換全檔案所有包含關鍵字的行