【问题标题】:SED regex syntax from notepad++notepad++ 中的 SED 正则表达式语法
【发布时间】:2016-04-22 13:37:09
【问题描述】:

这是我的第一个问题;)

我在记事本++中有查询-我想在另外两个之间搜索特定的字符串。我需要用 ie 替换这个字符串。 xxxxxxxxxx,我正在搜索:

<f n='foobar'><v>84093055983</v></f>

应该这样看:

<f n='foobar'><v>xxxxxxxxxxx</v></f>

&lt;v&gt; 标签之间的数字总是不同的,其余的总是相同的。 查询如下所示:(?&lt;=(foobar'&gt;&lt;v&gt;))(\d{11})(.*?)(?=&lt;)

我需要为一个文件运行大约 20 次搜索和替换,我认为某种脚本应该没问题,但是 notepad++ 没有这样的功能 - 我找到了一个 SED(我使用 Windows,所以 SED 来自 CYGWIN)。

我尝试了几种不同的方法,但我不知道这在 SED 中应该是什么样子。

或者你知道有什么好的方法吗? ;p

【问题讨论】:

  • sed 's/PATTERN/REPLACEMENT/' FILENAME 是使用sed 进行正则表达式替换的基本语法。只需将大写字母中的占位符替换为真实字符串即可。
  • 尝试扩展正则表达式的 -r 选项
  • 必须用相同的字符串替换所有数字(即xxxxxxxxxxx)吗?

标签: regex replace sed notepad++


【解决方案1】:

使用 sed -r "s#(f n='foobar'&gt;&lt;v&gt;)\d{11}(&lt;/v&gt;&lt;/f&gt;)#\1xxxxxxxxxxx\2#g" inflile &gt; outfile 之类的东西或使用 gnu sed 的 -i 选项。

我使用s#PATTERN#REPLACEMENT## 而不是/,因为您的搜索字符串中有斜杠。

【讨论】:

  • 谢谢 ;) 适用于:s#(&lt;f n='foobar'&gt;&lt;v&gt;).*?(&lt;/v&gt;&lt;/f&gt;)#\1xxxxxxxxxxx\2#g;。现在我试图用这样的东西替换.*?,但是,现在它不会工作:[[:digit:]]\{11\}
  • @Fangir 对我来说这行得通:echo "&lt;f n='foobar'&gt;&lt;v&gt;84093055983&lt;/v&gt;&lt;/f&gt;" | sed -r "s#(f n='foobar'&gt;&lt;v&gt;)[[:digit:]]{11}(&lt;/v&gt;&lt;/f&gt;)#\1xxxxxxxxxxx\2#g"(选项-r 和普通{11} 没有反斜杠)。
猜你喜欢
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 2011-11-07
  • 2010-09-19
相关资源
最近更新 更多