尋找紅寶石一個內襯替代打印出只有在訂單正則表達式匹配的替代:紅寶石一個襯墊僅更換匹配的行,丟棄他人
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
尋找紅寶石一個內襯替代打印出只有在訂單正則表達式匹配的替代:紅寶石一個襯墊僅更換匹配的行,丟棄他人
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
據我所知,有在紅寶石中是不等於-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)是流文件參數或STDIO$<.read
將它所有的讀取字符串$<.read.lines
分裂由新行字符返回數組map {|l| ... }
將收集表達式的結果到新陣列塊l =~ /Line 2/
如果檢查字符串匹配的正則表達式l.gsub(/Line 2/, "Line 2 replaced")
將取代所有的「2號線」到「2號線改爲」.compact
將從數組中刪除nil
值(返回新的數組不爲零的)puts []
將打印數組中的每個元素的新線可能紅寶石是不是這個任務的最佳選擇,我會選擇sed
或做它在文本編輯器。大多數文本編輯器中可以找到和正則表達式替換nowdays
我接受你的答案,因爲它符合法案。我現在可以用ruby替換我的perl一個班輪,因爲perl在處理多字節unicode字符時遇到問題。 Ruby和Python沒有這些問題,但缺少實用的「-ne」功能。我懷疑沒有「-ne」存在,因爲我在網上搜索了沒有vail,但我很高興你證實了我的這一點,並且仍然向我展示了一個簡單的,單線的解決方案。如果你覺得這是值得的,請投票給我的問題,以抵消那些投下了它的人(我的問題有什麼問題???) –
'string.scan(/ ^線2 $ /)地圖{|。X | x.gsub(/ 2 /,「2替換,其他丟棄」)} .join(「\ n」)' –
'Line 2'是否等於整行?你的Perl例子不檢查行位置的開始/結束。 'Line 1 \ nLine 2 Line 2 \ nLine 3 Line 2''的預期輸出是什麼? –
@WiktorStribiżew,我不在乎線的開始/結束。這只是一個例子。我只是在Ruby中尋找配方。正則表達式本身並不重要。不過謝謝你的關心。 –