2012-08-06 46 views
1

通常情況下,當你調用SED,您可以撥打\1引用的子匹配一把手,即:參考10個子匹配

<something> | sed "s/<regex>\(<regex>\)<regex>/\1/" 

這將只取中間的正則表達式和刪除外的。

但是,如果你有多於9場比賽,你會怎麼做?只需編寫\10不起作用,因爲它將被解釋爲take submatch number one and add a zero behind it

+0

您可以簡化它以減少捕獲組的數量嗎? – nhahtdh 2012-08-06 17:46:33

回答

5

在sed中不可能。你將不得不使用不同的工具。

這裏是如此的相似問題:

Circumvent the sed backreference limit \1 through \9

how to get 10th grouping value in sed?

+0

謝謝,第一個實際上說(我只能測試明天)你可以使用perl而不是sed並且幾乎以相同的方式應用「s/in/out /」表達式,但功能更強大。這實際上相當有幫助!所以我投了你的第一個鏈接的副本。 – erikbwork 2012-08-06 19:27:33

1

我不確定SED,但在許多語言(JavaScript,紅寶石),有正則表達式實現允許子匹配(或反向引用,因爲它有時被稱爲),只支持\1\9\10是根本不允許的。

任何其他的反向引用都需要使用更復雜的解析器。

+0

我認爲Perl允許它。 – 2012-08-06 17:55:04

+0

一些正則表達式的實現,比如Python,_will_ accept'\ 10'等等,如果模式中有9個以上的捕獲組。 – MRAB 2012-08-06 19:12:38