如何使用perl one liner删除文件中的特定文本?

时间:2012-03-05 20:59:54

标签: perl

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

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

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

我想要做的是删除内部单引号中的所有内容,如: '../../../ specialText /',但使用q()或\'来逃避引用不起作用,我不确定..是'不是'也搞砸了。我猜测没有把任何东西作为文本替换将正确删除它,但我不确定。

错误是:

  1. 反斜杠找到操作符在-e line 1附近的位置,靠近“/ specialText / \”

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

  3. 在-e第1行的EOF之前的任何地方找不到字符串终结符。
  4. 如何重写这一个班轮来实现这个目标?

    这样做。

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

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

2 个答案:

答案 0 :(得分:3)

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

但是,为了避免严重leaning toothpick syndrome,我建议改为使用其他正则表达式分隔符以及\Q\E escape sequences,如下所示:

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

答案 1 :(得分:1)

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

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