寻找红宝石单衬垫替代品,只有当线条与正则表达式匹配时才打印出替换:
echo -e "Line 1\nLine 2\nLine 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
答案 0 :(得分:1)
据我所知,ruby中没有等同于-ne
的简写。所以它会更长一点:
echo -e "Line 1\nLine 2\nLine 3" | ruby -e 'puts $<.read.lines.map {|l| l =~ /Line 2/ ? l.gsub(/Line 2/, "Line 2 replaced, others discarded") : nil }.compact'
其中:
$<
也ARGF
(docs)是Stream for file参数或STDIO $<.read
会将其全部读为字符串$<.read.lines
由换行符分割,返回数组map {|l| ... }
会将块中的表达式结果收集到新数组l =~ /Line 2/
检查字符串是否与Regex匹配l.gsub(/Line 2/, "Line 2 replaced")
会将所有“第2行”替换为“第2行已更换”.compact
将从数组中删除nil
值(返回没有nil的新数组)puts []
将在新行可能ruby不是这项任务的最佳选择,我会选择sed
或在文本编辑器中执行。大多数文本编辑器现在可以通过正则表达式查找和替换