有时我们需要替换文件中的文本,例如,将Document.txt 文件中所有“my family”替换为“us” 。为此,我们可以使用自己喜欢的文本编辑器(Kate、Gedit、Sublime Text 等),但了解其他方法总是很有帮助的,即用其他方式实现相同的结果。
事实证明,使用正则表达式可以实现这一点;`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-doc包,看看它能实现什么功能;它简直就是另一个世界。
顺便说一句,关闭,假设您要查找$ 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
第二种变体的问题是它不会替换子文件夹中的文件
不管怎样,我希望你觉得这很有趣。对我来说它非常有用,我现在可以直接从终端替换文本......太棒了!