❶ linux下 批量替換execl中的部分內容
如果後綴是 xls 或者 xlsx的, 這種格式其實是個壓縮包, 你先安裝vim 和 unzip, 然後用vim打開回文件,
會進到一個文件列表頁, 然後選文件 xl/sharedString.xml ,敲回車進入編輯頁面,用vim的批量替換,將字元串全替換好了之後 保存退出就可以了,退出後到文件列表頁,這答里直接退出就行
另外要注意先備份文件
補充:vim的批量替換的例子(冒號要輸入) :%s/aaaaa/張三/g
另外不用擔心會改到注釋之類的東西,因為注釋的內容不在這個xml文件里
如果要自動的話可以參考:
unzip test.xlsx -d test
cd test
sed -i 's/aaaaa/張三/g' xl/sharedStrings.xm
zip -f ../test.xlsx xl/sharedStrings.xml
cd ../
rm -rf test
❷ Linux下回車^M去除方法
在windows上編寫的shell、python等腳本在Linux上無法正常的執行,會有 ^M 相關提示,
原因 :
在Linux上使用vim打開文件,顯示很多的 ^M 字元,主要是因為在Windows下換行使用CRLF兩個字元來表示,其中CR為回車(ASCII=0x0D),LF為換行(ASCII=0x0A),而在Linux下使用LF一個字元來表示。在Linux下使用vim來查看一些Windows下創建的腳本文件時,會發現在每一行尾部有^M字元,其實它是顯示CR回車字元
Unix體系裡,每行結尾只有「<換行>」,即「\n」;
Windows體系裡面,每行結尾是「<換行><回 車>」,即「\n\r」。
一個直接結果是,Unix體系下的文件在Windows里打開的話,所有文字會變成一行;
而Windows里的文件在Unix下打開的話,在每行的結尾可能會多出一個^M符號。
如果正常編輯文件中看不見^M,可以用」cat -A test.file」號令查看。
使用vim方式處理
在vim命令模式下輸入%s/^M$//g
回車即會自動刪除該文件中的所有 ^M 字元。
% 指匹配整個文件,s 是置換的意思,^M 注意要用 Ctrl + V Ctrl + M 來輸入,M 後面的 $ 代表匹配行尾的內容,最後的 g 則表示每行中匹配到的內容都要置換。
理解了命令的含義,就好變通使用了,比如說,要將某個文件中的 Vim 全部替換成 VIM,則可以使用這樣的命令::%s/Vim/VIM/g。
方法1:
在命令模式下:輸入:%s/^M//g 然後,回車即可替換
注,其中」^M」的輸入,分別是「Ctrl+v」、「Ctrl+M」鍵生成的
方法2:
使用vi打開文本文件
vi dos.txt
命令模式下輸入
:set fileformat=unix
:w
方法3:
使用sed 工具
sed 』s/^M//』 filename > tmp_filename
方法4:
既然window下的回車符多了『\r』,那麼當然通過刪除『\r』 ,也可以實現:
tr -d 『\r』
方法5:使用Linux上的工具
tofrodos
(1)安裝tofrodos
sudo apt-get install tofrodos
實際上它安裝了兩個工具:todos(相當於unix2dos),和fromdos(相當於dos2unix)
安裝完即可,現在你已經可以進行文本格式的轉換啦。
比如: todos Hello.txt (即unix2dos Hello.txt)
fromdos Hello.txt (即dos2unix Hello.txt)
PS :
編輯器IDE設置文件回車格式為unix格式
❸ Linux /r /n
CR :Carriage Return,對應ASCII中轉義字元\r ,0x0D(asc碼是13) 指的是「回車」 \r是把游標置於本行行首
LF :Linefeed,對應ASCII中轉義字元\n ,0x0A(asc碼是10) 指的是「換行」 \n是把游標置於下一行的同一列
CRLF:Carriage Return & Linefeed,\r\n , 0x0D + 0x0A ,指的是回車換行 \r\n把游標置於下一行行首
^M的原因 : ^M 注意要用 Ctrl + V Ctrl + M 來輸入
Dos、Windows 格式的文件,用 0D 0A (CR+LF)作為換行符,而Unix 的則是以0A(LF) 作為換行符.所以dos 底下的文本文件到了unix的話,換行符就會多出來一個 0D(CR) 顯示為 ^M,在linux中vim中無法顯示\r
因為ascii中對應的不是linux中的標准acsii字元,其實其對應的ASCII碼十進制形式是: 13 (無顯示形式);對應的八進制形式 15 (顯示為^M)從二進制層面來理解,即可以刪除換行符前面對應的字元位元組(我瞎編的,應該對的),在字元層面直接刪除^M這個位元組即可
方法1:
在命令模式下:輸入:%s/^M//g 然後,回車即可替換
注,其中」^M」的輸入,分別是「Ctrl+v」、「Ctrl+M」鍵生成的
方法2:
使用vi打開文本文件
vi dos.txt
命令模式下輸入
:set fileformat=unix
:w
方法3:
使用sed 工具
sed 』s/^M//』 filename > tmp_filename
方法4:
既然window下的回車符多了『\r』,那麼當然通過刪除『\r』 ,也可以實現:
tr -d 『\r』
或者:
sed -i 's/\r//' startup.sh
window下默認是 \r\n
linux下是\n
unix下是\r
現在, 我們看看本文開頭部分的問題。 假設有一個linux下的unix.txt文件, 那麼, 它在文件中的換行標志是:\n, 現在把unix.txt拷貝靠Windows上, 那好啊, Windows那雙犀利的眼神彷彿是在對unix.txt文件說: 別跟我整什麼\n, 我只認識文件中的\r\n, 如果你這個unix.txt文件裡面有\r\n, 那我就認為是換行符, 否則, 我不認你。 如此一來, Windows壓根就找不到unix.txt中的\r\n, 所以, 對於Windows而言, 壓根就沒有發現unix.txt有任何換行, 所以, 我們從Windows上看到的unix.txt文件顯示在一行裡面。
❹ linux vi ^M 是什麼
linuxvi ^M表示回車換行。
回車鍵有兩個作用,一是確認輸入的執行命令,二是在文字處理中起換行的作用,回車鍵也是電腦鍵盤上被用得較多的按鍵之一,使用回車鍵要注意:不要大力猛敲猛砸。
word換行符是一種換行符號,它的作用是換行顯示,但是它不是真正的段落標記,它的換行不是真正意義上的重起一段,因此被換行符分割的文字其實仍然還是一個段落中的,word中基於段落的所有操作都是不會識別換行符為段落結尾的。
(4)linux系統回車替換擴展閱讀:
換行鍵的編碼:
電腦早期引用了許多電信概念與技術。早期制定的代碼如ASCII(現今仍自沿用)和EBCDIC與後期的Unicode都包括「歸位」控制字元。
在ASCII編碼中,歸位碼是十進制13或十六進制 x0D。在c或其他一些語言中,這個字元用 表示。根據操作系統的不同,有時它與換行符 一起使用。在許多文本編輯器中,有時也會用 ^r 或 ^M (相當於 Ctrl-M) 來表示。
❺ 總結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
//替換文件中的所有匹配項
❻ windows、linux回車換行「0D0A」並非「0A」問題
1、如果沒有安裝dos2unix命令,請使用yum命令安裝dos2unix: yum install dos2unix*。
2、在Linux終端,執行命令:dos2unix 文件名。
我下午遇到同樣問題,同事忙幫解決的。