用一个命令替换文件内的文本:perl

在某些情况下,我们想替换文件中的文本,例如, 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

第二个变体的问题是它将不会替换子文件夹中的文件

无论如何,我希望您发现它很有趣。 对我来说,它真的很有用,我已经可以直接从终端替换文本了……太好了! 😀


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   Boom

    好吧,我想我们这里的许多人都知道sed命令,该命令具有相同的目的,它做的更好,更易于使用...

    1.    KZKG ^ Gaara

      谢谢你的评论,
      仅两个细节,为什么您说sed会使它更好呢? 这么多“怪异”字符真的更容易使用吗?

  2.   Federico A.ValdésToujague

    祝福大家!!!。 我已经使用了命令 口渴,并且此处用perl描述的方法更简单。 谢谢KZKG ^ Gaara !!!。

    1.    KZKG ^ Gaara

      谢谢你的评论🙂
      好吧,至少在我看来,这比正则表达式更简单...拥有这么多“怪异”字符,对于不懂事的人可以做一些真正复杂的事情来理解和学习。

      1.    吉卡德

        有一句古老的格言:“我有一个问题,我决定使用正则表达式...现在我有两个问题»😉

        1.    KZKG ^ Gaara

          哈哈哈哈哈哈哈!!!
          正则表达式可以在特定程度上挽救我们的生命……是的,要花很长时间才能学会使用它们,而不会死于尝试。

          如果我几年前知道这个命令,上帝! 我的生活会多么简单😀

          1.    吉卡德

            明确! 处理得很好,它们非常强大🙂没有更好的方法来处理文本。 但是有时候,就像您在本例中使用Perl所说的那样,如果替换足够,您不必走那么远。
            无论如何我都会使用Python :)

    2.    猎人

      但是在口渴的时候,我觉得这更简单了……我在做错什么吗?

      sed -i“如果/我要更改什么/要输入什么新内容/”要替换的文件

      1.    KZKG ^ Gaara

        呵呵...如果我想将“ http://my.blog.com/content/”替换为“ http://my.blog.com/uploads/files/”😀...已经在那儿了,您必须在\后面加上空格和其他,它变得复杂与否?

        1.    猎人

          使用/作为分隔符不是强制性的。 用+看

          sed -i«s + http://my.blog.com/content/+http://my.blog.com/uploads/files/+»文件

          1.    KZKG ^ Gaara

            O_O…WTF!
            您现在已经为我打开了一整套选择。.O_O

          2.    吉卡德

            我喜欢这些我们都学到一些东西的帖子🙂
            我也不知道

  3.   RAW基本

    我更喜欢直接使用vi ..

    简单如:
    :%s /我们/我的家人/ g

    %->整个文件
    s->搜索
    g->所有出现

    问候..

    1.    KZKG ^ Gaara

      谢谢!
      我不知道如何用vi

  4.   s0rmt4il

    已添加到收藏夹!

    谢谢!

  5.   杜兰

    入门很棒!如果有人感兴趣,可以使用Linux sed命令: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    怀疑

      如果我要替换的文件中带有引号,会发生什么情况?
      示例将文字“»1”替换为文字:»2”
      命令将如何?

  6.   珀西·萨尔加多(Percy Salgado)

    你好

    我想替换一个在中间带有@且仅将文本更改为at之前的字符串。

    更改文字:Viva elPerú
    新文字:Viva mi patria @percysalgado
    显示:我的祖国万岁

    感谢您的帮助

  7.   匿名

    “ \”您必须在带有双用@,#的字符之前使用斜杠,以便将它们解释为文本。

  8.   加巴

    以及如何在Windows中执行呢?