【问题标题】:How to do inplace replacement in a file using perl如何使用perl在文件中进行就地替换
【发布时间】:2014-02-04 18:20:41
【问题描述】:

这是我的输入文件

{1:ABCDEFGHXXX}{2:I300IRVTUKAXXXX}
:20:REFERENCE
:82A:IRVTUKYXXX
:87A:ABCDEF

我需要将行 82A:IRVTUKYXXX 更改为 82A:IRVTUK0XXX 这意味着我必须在 :82: 之后找到第 8 个字符并将其替换为 0

我们是否有任何 perl 脚本或命令来替换特定位置的任何字符。在这种情况下,它是我要匹配的模式中的第 8 个字符。

【问题讨论】:

  • 你的例子表明你替换了 :82A: 之后的第 7 个字符:

标签: regex perl shell


【解决方案1】:

你可以使用:

perl -i -pe 's/(?<=:82A.{7})./0/' file

cat file
{1:ABCDEFGHXXX}{2:I300IRVTUKAXXXX}
:20:REFERENCE
:82A:IRVTUK0XXX
:87A:ABCDEF

【讨论】:

  • 你能解释一下它是如何工作的吗?
  • @user2892124: (?&lt;=...) 是lookbehind 的语法,意思是查找前面有:82A 和7 个字符的字符。
  • Thnq.. 它很有用。您还可以告诉如何在一定范围内进行相同的替换吗?例如,在同一个示例中,如何替换第 6 到第 10 个字符。我是。 perl 新手并尝试更改上述命令不起作用..
  • 当然可以:perl -i -pe 's/(?&lt;=:82A.{5}).{5}/0/' file
  • 此外,如果原始答案有效,您可以将答案标记为已接受。您仍然可以在这里发表评论以消除您的疑虑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
  • 1970-01-01
  • 2011-01-17
相关资源
最近更新 更多