Ruby一个衬里只替换匹配的线,丢弃其他线条

  • 本文关键字:其他 替换 一个 Ruby ruby regex
  • 更新时间 :
  • 英文 :


寻找Ruby One Liner替代品以在线匹配正则表达式时才打印出替代:

echo -e "Line 1nLine 2nLine 3" | perl -ne "print if s/Line 2/Line 2 replaced, others discarded/g"

输入:

Line 1
Line 2
Line 3

输出:

Line 2 replaced, others discarded

,据我所知,Ruby中的-ne速记没有等效。因此,它将更长的时间:

echo -e "Line 1nLine 2nLine 3" | ruby -e 'puts $<.read.lines.map {|l| l =~ /Line 2/ ? l.gsub(/Line 2/, "Line 2 replaced, others discarded") : nil }.compact'

其中:

  • $<ARGF(文档)是用于文件参数或stdio
  • 的流
  • $<.read将全部读取到字符串
  • $<.read.lines由新线字符拆分,返回数组
  • map {|l| ... }将收集在新数组中表达的结果
  • l =~ /Line 2/检查字符串匹配正则
  • l.gsub(/Line 2/, "Line 2 replaced")将把所有"第2行"替换为"替换行"
  • .compact将从数组中删除 nil
  • puts []将在新行上打印每个数组的每个元素

可能Ruby不是最佳选择,我会选择sed或在文本编辑器中进行。如今,大多数文本编辑器可以通过Regex找到并替换。

最新更新