在某些情況下,我們想替換文件中的文本,例如,在 Document.txt “我的家人”對“我們”所說的一切。 為此,我們可以使用首選的文本編輯器(Kate,Gedit,SublimeText等),但是了解變體以及其他實現相同結果的方法總是很不錯的🙂
碰巧 常用表達 可以實現,sed命令簡直是宏偉,它具有無窮的變體和選項,但是...對於那些只想從 最簡單的方法,對於他們來說,我帶來了這個簡單得多的變體:
在示例之後,我們有文件 Document.txt 位於 $ HOME / Document.txt 帶有以下文本:
(......) 我的家庭 就像他們所有人一樣,就像您或您鄰居的一樣。 事實上 我的家庭 在政治和社會上,我們努力成為負責任的人,並在社會的眼中。 但是,在我的房子裡有一隻敗類,這就是我的角色LOL!。 我一直都是不怕說出自己想法的人(即使在社會上看來這顯然不正確),儘管實際上我的家人已經受夠了
污垢當今社會。
使用以下命令,您將更改«我的家庭“由”我們“:
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
就這麼簡單🙂
因此,文字為:
(......) 我們 就像他們所有人一樣,就像您或您鄰居的一樣。 事實上 我們 在政治和社會上,我們努力成為負責任的人,並在社會的眼中。 但是,在我的房子裡有一隻敗類,這就是我的角色LOL!。 我一直都是不怕說出自己想法的人(即使在社會上看來這顯然不正確),儘管實際上我的家人已經受夠了
污垢當今社會。
語法為:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
該命令可能看起來有些複雜,讓我們對其進行分解並更簡單地進行解釋😉
- perl的 :perl我們將使用的內容
- -pi :Pí,如何 π (近似值為3.14)
- -e :E將其想像為“ e執行” ^ - ^
- 然後用引號 » 我們打開一個 s 然後以 g:“ sg” …想像S為開始而G為遊戲結束😀
- 在之間切換 sg 我們必須放兩套方括號: [] y [],就是這樣: “ S [] [] g”
- 如上所述,在第一個括號內,我們要刪除並替換為新的文本,而在第二個括號內,要放入新文本,如下例: “ S [我的家人] [我們] g”
是不是很簡單?
解釋實際上比命令所需要的要廣泛得多,很容易理解🙂
Perl不僅僅是替換文本的一種方式,它還是一種完整的語言😉
如果要了解更多信息,請安裝軟件包 Perl文件 看看它允許什麼,這只是一個不同的世界。
順便說一句,關閉,假設您要查找$ HOME / Documents中所有的.txt文件,並在每個文件中用“ us”替換“ my family”,則可以加入find + perl來實現:
find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;
或使用通配符:
perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt
第二個變體的問題是它不會替換子文件夾中的文件
無論如何,我希望您發現它很有趣。 對我來說,它真的很有用,我已經可以直接從終端替換文本了……太好了! 😀
21條評論,留下您的評論
好吧,我想我們這裡的許多人都知道sed命令,它具有相同的目的,它可以做得更好並且更易於使用...
謝謝你的評論,
僅兩個細節,為什麼您說sed會使它更好呢? 這麼多“怪異”字符真的更容易使用嗎?
祝福大家!!!。 我已經使用了命令 口渴,這裡用perl描述的方法更簡單。 謝謝KZKG ^ Gaara !!!。
謝謝你的評論🙂
好吧,至少對我來說,這似乎比正則表達式更簡單……因為有這麼多“怪異”字符,對於不懂事的人來說,可以做一些真正複雜的事情來理解和學習。
有一句老話:«我有一個問題,我決定使用正則表達式...現在我有兩個問題»
哈哈哈哈哈哈哈!!!
正則表達式可以在特定程度上挽救我們的生命……是的,要花很長時間才能學會使用它們,而不會死於嘗試。
如果我幾年前知道這個命令,上帝! 我的生活會多麼簡單😀
明確! 處理得很好,它們非常強大🙂沒有什麼比操縱文本更好的了。 但是有時候,就像您在本例中使用Perl所說的那樣,如果替換足夠,您不必走那麼遠。
無論如何我都會使用Python :)
但是在口渴的時候,我覺得這更簡單了……我在做錯什麼嗎?
sed -i“如果/我要更改什麼/新投入/”替換文件
呵呵...如果我想將“ http://my.blog.com/content/”替換為“ http://my.blog.com/uploads/files/”😀...已經有放在\和空格之間,它是否變得複雜?
使用/作為分隔符不是強制性的。 用+看
sed -i«s + http://my.blog.com/content/+http://my.blog.com/uploads/files/+»文件
O_O…WTF!
您現在已經為我打開了一整套選擇。.O_O
我喜歡這些我們都學到一些東西的帖子🙂
我也不知道
我更喜歡直接使用vi ..
就像:
:%s /我們/我的家人/ g
%->整個文件
s->搜索
g->所有出現
問候......
格拉西亞斯!
我不知道如何用vi
已添加到收藏夾!
格拉西亞斯!
如果您有點rpl命令,請看一下
http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/
如果您有興趣的話,與Linux sed命令相同: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html
如果我要替換的文件內帶有引號,該怎麼辦?
示例將文字“»1”替換為文字:»2”
命令將如何?
你好
我想替換一個在中間帶有@且僅將文本更改為at之前的字符串。
更改文字:秘魯萬歲
新文字:Viva mi patria @percysalgado
顯示:我的祖國萬歲
謝謝你的幫助
“ \”您必須在帶有雙用@,#的字符之前使用斜杠,以便將它們解釋為文本。
以及如何在Windows中執行呢?