sed -i :直接修改讀取的文件內容,而不是輸出到終端。
sed -i 就是直接對文本文件進行操作的
替換每行第一次出現的字元串
sed -i 's/查找的字元串/替換的字元串/' 文件
替換文件中所有出現過的字元串
sed -i 's/查找的字元串/替換的字元串/g' 文件
例如,將文件GAOWEILIUSHI_201809_084中的|全部替換為||
sed -i 's/|/||/g' GAOWEILIUSHI_201809_084
㈡ linux替換文件中的字元串怎麼使用
(一)通過vi編輯器來替換。
參考博文:
http://www.linuxdiyf.com/viewarticle.php?id=99843
http://kingaragorn.javaeye.com/blog/467308
vi/vim 中可以使用 :s 命令來替換字元串。以前只會使用編輯軟體進行替換,今天發現該命令有很多種寫法(vi 真是強大啊,還有很多需要學習),記錄幾種在此,方便以後查詢。
:s/well/good/ 替換當前行第一個 well 為 good
:s/well/good/g 替換當前行所有 well 為 good
:n,$s/well/good/ 替換第 n 行開始到最後一行中每一行的第一個 well 為 good
:n,$s/well/good/g 替換第 n 行開始到最後一行中每一行所有 well 為 good
n 為數字,若 n 為 .,表示從當前行開始到最後一行
:%s/well/good/(等同於 :g/well/s//good/) 替換每一行的第一個 well 為 good
:%s/well/good/g(等同於 :g/well/s//good/g) 替換每一行中所有 well 為 good
可以使用 # 作為分隔符,此時中間出現的 / 不會作為分隔符
:s#well/#good/# 替換當前行第一個 well/ 為 good/
:%s#/usr/bin#/bin#g
可以把文件中所有路徑/usr/bin換成/bin
(二)Sumly法直接替換文件中的字元串。(此法不用打開文件即可替換字元串,而且可以批量替換多個文件。)
例1
執行命令:
perl -p -i -e "s/China/Sumly/g" /www/*.htm /www/*.txt
上面的意思是說將www文件夾下所有的htm和txt文件中的「China」都替換為「Sumly」
例2
執行命令:
perl -p -i -e "s/memory_proction/memory_proction2/g" ./*.sql
上面的意思是將當前目錄下所有的sql文件中的「memory_proction」替換成「memory_proction2」
㈢ Linux查找和替換目錄下所有文件中字元串
linux查找和替換目錄下所有文件中字元串單個文件中查找替換很簡單,就不說了。文件夾下所內有文件中字容符串的查找替換就要記憶了,最近部署幾十台linux伺服器,記錄下總結。查找文件夾下包含字元串的文件例:查找/usr/local目錄下所有包含rubyer.me的文件。1
grep
-lr
'rubyer.me'
/usr/local/*vim替換單個文件中所有字元串方法例:替換當前文件中所有old為new
www.shiwu.com
1
:%s/old/new/g2#%表示替換說有行,g表示替換一行中所有匹配點。
替換文件夾下包含字元串的文件sed結合grep例:要將目錄/www下面所有文件中的zhangsan都修改成lisi,這樣做:1
sed
-i
s/old/new/g
`grep
old
-rl
/www`作者
skq
㈣ linux下批量查詢文件內容字元串並替換
查找批量替換文件時,去除某種類型的文件,下面表示在./salt/*下的所有文件中,不包括tar.gz結尾的文件,搜索包含有node01字元串的文件
grep "node01" -rl ./salt/* --exclude=*.tar.gz
其實這里的 -r表示遞歸,-l表示輸出文件名,
也可以將 -rl替換為-rn,-n表示是哪一行,會輸出行號詳細信息
grep "node01" -rn ./salt/* --exclude=*.tar.gz
替換字元串:
把./salt/*目前下所有文件進行遍歷,查是否包含node01字元串的,不包括tar.gz結尾的文件。然後把node01用test01進行批量替換。
grep "node01" -rl ./salt/* --exclude=*.tar.gz | xargs sed -i 's/node01/test01/g'
㈤ Linux批量替換多個文件中字元串
linux批量替換多個文件中字元串linux下批量替換多個文件中的字元串的簡單方法。用sed命令可以批量替換多個文件中的字元串。
用sed命令可以批量替換多個文件中的字元串。sed
-i
s/原字元串/新字元串/g
`grep
原字元串
-rl
所在目錄`例如:我要把mahuinan替換為huinanma,執行命令:sed
-i
s/mahuinan/huinanma/g
'grep
mahuinan
-rl
/www'這是目前linux最簡單的批量替換字元串命令了!具體格式如下:sed
-i
s/oldString/newString/g
`grep
oldString
-rl
/path`實例代碼:sed
-i
s/大小多少/日月水火/g
`grep
大小多少
-rl
/usr/aa`sed
-i
s/大小多少/日月水火/g
`grep
大小多少
-rl
./`
㈥ 總結linux替換字元串的幾種方法
(1)VIM替換字元串方法
1. 基本替換
:s/str1/str2/ 替換當前行第一個str1為str2
:s/str1/str2/g 替換當前行所有str1為str2
:n,$s/str1/str2/ 替換第 n 行開始到最後一行中每一行的第一個str1為str2
:n,$s/str1/str2/g 替換第 n 行開始到最後一行中每一行所有str1為str2
(n 為數字,若 n 為 .,表示從當前行開始到最後一行)
:%s/str1/str2/(等同於 :g/str1/s//str2/) 替換每一行的第一個str1為str2
:%s/str1/str2/g(等同於 :g/str1/s//str2/g) 替換每一行中所有str1為str2
2. 可以使用 # 作為分隔符,此時中間出現的 / 不會作為分隔符
:s#str1/#str2/# 替換當前行第一個str1/ 為str2/
:%s+/str11/str12/+/str21/str22+ (使用+ 來 替換 / ): /str11/str12/替換成/str21/str22/
3. 文件中刪除^M
問題描述:對於換行,Windows下用回車換行(0A0D)來表示,Linux下是回車(0A)來表示。這樣,將window上的文件拷到Unix上用時,總會有個^M,請寫個用在Unix下的過濾Windows文件的換行符(0D)的shell或c程序。有兩種方法可以完成此目的:
(1)使用命令:cat oldfilename | tr -d 「^V^M」 > newfilename
(2)使用命令:sed -e 「s/^V^M//」 oldfilename > newfilename
需要注意的是在1、2兩種方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必須要手工進行輸入,而不是粘貼。
在vim中處理:首先使用vim打開文件,然後按ESC鍵,接著輸入命令:
:%s/^V^M//
:%s/^M$//g
如果上述方法無用,則正確的解決辦法是:
(1) tr -d "\r" < old_file_name > new_file_name 或者 cat oldfilename | tr -d "\r" > new_file_name
(2) tr -d "\015" < old_file_name > new_file_name或者 cat oldfilename | tr -d "\015" > new_file_name
strings A>B
4. 其它技巧
利用 :s 命令可以實現字元串的替換。具體的用法包括:
:s/str1/str2/ 用字元串 str2 替換行中首次出現的字元串 str1
:s/str1/str2/g 用字元串 str2 替換行中所有出現的字元串 str1
:.,$ s/str1/str2/g 用字元串 str2 替換正文當前行到末尾所有出現的字元串 str1
:1,$ s/str1/str2/g 用字元串 str2 替換正文中所有出現的字元串 str1
:g/str1/s//str2/g 功能同上
從上述替換命令可以看到:g 放在命令末尾,表示對搜索字元串的每次出現進行替換;不加 g,表示只對搜索字元串的首次出現進行替換;g 放在命令開頭,表示對正文中所有包含搜索字元串的行進行替換操作。
(2)sed命令替換字元串
sed替換的基本語法為:
代碼如下:
sed
's/原字元串/替換字元串/'
單引號裡面,s表示替換,三根斜線中間是替換的樣式,特殊字元需要使用反斜線」\」進行轉義,但是單引號」『」是沒有辦法用反斜線」\」轉義的,這時候只要把命令中的單引號改為雙引號就行了,例如:
代碼如下:
sed "s/原字元串包含'/替換字元串包含'/"
//要處理的字元包含單引號
命令中的三根斜線分隔符可以換成別的符號,這在要替換的內容有較多斜線是較為方便,只需要緊跟s定義即可,例如換成問號」?」:
代碼如下:
sed 's?原字元串?替換字元串?'
//自定義分隔符為問號
可以在末尾加g替換每一個匹配的關鍵字,否則只替換每行的第一個,例如:
代碼如下:
sed 's/原字元串/替換字元串/'
//替換所有匹配關鍵字
上箭頭」^」表示行首,美元」$」符號如果在引號中表示行尾,但是在引號外卻表示末行(最後一行),這里犯二了,搜了半天哪個符號表示首行,半天才想起來,首行就是數字」1″啊.那麼在行首和行尾添加字元串就是把行尾和行首替換,例如:
代碼如下:
sed 's/^/添加的頭部&/g' //在所有行首添加
sed
's/$/&添加的尾部/g' //在所有行末添加
sed '2s/原字元串/替換字元串/g' //替換第2行
sed
'$s/原字元串/替換字元串/g' //替換最後一行
sed '2,5s/原字元串/替換字元串/g' //替換2到5行
sed
'2,$s/原字元串/替換字元串/g' //替換2到最後一行
替換樣式可以多個在同一條命令中執行,用分號」;」分隔,例如:
代碼如下:
sed 's/^/添加的頭部&/g;s/$/&添加的尾部/g'
//同時執行兩個替換規則
sed處理過的輸出是直接輸出到屏幕上的,要保存可以將輸出重定向,或者使用參數」i」直接在文件中替換:
代碼如下:
sed -i 's/原字元串/替換字元串/g' filename
//替換文件中的所有匹配項
㈦ 如何在linux環境下實現txt文本的字元串替換
#!/usr/bin/python
import
sys
fin=open(sys.argv[1])
fout=open(sys.argv[1]+'.new',"w")
line=fin.readline()
while
line!='':
line=line.replace(sys.argv[2],sys.argv[3])
fout.write(line)
line=fin.readline()
fin.close()
fout.close()
各linux里基本都有python的,將上面保存為rp.py,替換某文件中字元串格式
./rp.py
~/tmp.txt
aaa
xxx
將自己家目錄中的tmp.txt中所有aaa替換為xxx
新產生的文件也在tmp.txt目錄中,叫tmp.txt.new