寻找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找到并替换。