在某些情况下,我们想替换文件中的文本,例如, Document.txt “我的家人”对“我们”所说的一切。 为此,我们可以使用我们喜欢的文本编辑器(Kate,Gedit,SublimeText等),但是了解变体和其他实现相同结果的方法总是好事🙂
碰巧 常用表达 可以实现,sed命令简直很棒,它具有无穷的变体和选项,但是...对于那些只想从 最简单的方法,对于他们来说,我带来了这个简单得多的变体:
在示例之后,我们有文件 Document.txt 位于 $ HOME / Document.txt 带有以下文本:
(......) 我的家人 就像他们所有人一样,就像您或您邻居的一样。 事实上 我的家人 在政治和社会上,我们努力成为负责任的人,并在社会的眼中。 但是,在我的房子里有一只败类,这就是我的角色,哈哈! 我一直都是不怕说出自己想法的人(即使在社会上看来这似乎不正确),尽管实际上我的家人已经厌倦了
污垢当今社会。
使用以下命令,您将更改«我的家人“由”我们“:
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
就这么简单🙂
因此,文字为:
(......) 我们 就像他们所有人一样,就像您或您邻居的一样。 事实上 我们 在政治和社会上,我们努力成为负责任的人,并在社会的眼中。 但是,在我的房子里有一只败类,这就是我的角色,哈哈! 我一直都是不怕说出自己想法的人(即使在社会上看来这似乎不正确),尽管实际上我的家人已经厌倦了
污垢当今社会。
语法为:
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
第二个变体的问题是它将不会替换子文件夹中的文件
无论如何,我希望您发现它很有趣。 对我来说,它真的很有用,我已经可以直接从终端替换文本了……太好了! 😀
好吧,我想我们这里的许多人都知道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 elPerú
新文字:Viva mi patria @percysalgado
显示:我的祖国万岁
感谢您的帮助
“ \”您必须在带有双用@,#的字符之前使用斜杠,以便将它们解释为文本。
以及如何在Windows中执行呢?