【问题标题】:How to delete specfic text in a file using a perl one liner?如何使用 perl one liner 删除文件中的特定文本?
【发布时间】:2012-03-06 22:27:47
【问题描述】:

我正在尝试在 XML 文件中查找一些文本并仅删除包含该文本的行的一部分。
经过一些代码搜索后,我找到了这种格式来尝试:perl -p -i -e "s/$1/$2/g" $3

所以我正在使用这个代码:

perl -p -i.bak -e "s/\'../../../specialText/\'//g" "C:/box/fileName.XML";

我想要做的是从内部单引号中删除所有内容,如下所示: '../../../specialText/',但使用 q() 或 \' 来转义引号不起作用,我不确定 ..'s are'也不会把事情搞砸。我猜不放任何东西作为文本替换会正确删除它,但我不确定。

错误是:

  1. 在 -e 第 1 行,“/specialText/\”附近的运算符预期位置找到反斜杠

  2. (在 \? 之前缺少运算符) -e 第 1 行,“/specialText/\”附近的语法错误

  3. 在 -e 第 1 行的 EOF 之前的任何位置都找不到字符串终止符“'”。

如何重写这一行来实现这一点?

这行得通。

C:\box>perl -p -i.bak -e s/Copyright/bar/g Test.txt

我在另一个文件上尝试过,所以现在我只需要使用它来修改我的原始文件。

【问题讨论】:

    标签: perl


    【解决方案1】:

    您可以通过在每个字符前添加一个反斜杠 (\) 来转义搜索字符串中的 ./ 字符。

    但是,为了避免尖锐的leaning toothpick syndrome,我建议改用替代正则表达式分隔符和\Q\Eescape sequences,如下所示:

    perl -p -i.bak -e "s(\Q'../../../specialText/'\E)()g" "C:/box/fileName.XML"
    

    【讨论】:

      【解决方案2】:

      使用另一组分隔符有什么问题?

      perl -p -i.bak -e "s{'../../../specialText/'}{}g" "C:/box/fileName.XML"
      

      【讨论】:

      • 我没有得到这样的文件或目录。我在 Windows 7 机器上使用 ActivePerl。现在是设置问题吗?
      • 然后检查文件名,因为代码有效。 ) 顺便说一句,在测试这条单线时发生在我身上;结果我把 .pl 文件和 .pdf 文件弄混了。 )
      • 我放了一个分号';'在最后 pf 语句,当你从命令行运行时不需要它。
      猜你喜欢
      • 2014-07-31
      • 1970-01-01
      • 2016-11-22
      • 1970-01-01
      • 1970-01-01
      • 2013-07-18
      • 2015-08-19
      • 2013-09-02
      • 2015-03-03
      相关资源
      最近更新 更多