我發現我想要的真正相關的這個問題:Parsing using awk or sed in Unix,但我無法弄清楚以下哪些呢:sed中的 1是做什麼的?
's/\([,=]\) /\1/g'
我知道,G中全局替換,但實在不明白這是怎麼回事在問題的範圍內。
我發現我想要的真正相關的這個問題:Parsing using awk or sed in Unix,但我無法弄清楚以下哪些呢:sed中的 1是做什麼的?
's/\([,=]\) /\1/g'
我知道,G中全局替換,但實在不明白這是怎麼回事在問題的範圍內。
這裏有一個簡單的例子:
$ echo 'abcabcabc' | sed 's/\(ab\)c/\1/'
ababcabc
$ echo 'abcabcabc' | sed 's/\(ab\)c/\1/g'
ababab
$ echo 'abcabcabc' | sed 's/\(ab\)\(c\)/\1d\2/g'
abdcabdcabdc
在第一個命令,只有第一場比賽受到影響。在第二個命令中,每個匹配都會受到影響。在這兩種情況下,\1
都是指由轉義括號捕獲的字符。
在第三個命令中,指定了兩個捕獲組。他們被稱爲使用\1
和\2
。最多可以使用九個捕獲組。
除了g
(全球)運算符(或沒有它,第一場比賽),你可以指定一個特定的比賽:
$ echo 'aaaaaa' | sed 's/a/A/4'
aaaAaa
\(...\)
將捕獲在parens內指定的字符,而\1
將用於引用第一個匹配,這是正則表達式的一部分。
很好的回答。我只是想補充一點,這意味着引用的特定示例會刪除逗號或等號後面的空格,因爲\ 1會放回任何在包含空格之間匹配的空格。 – 2011-01-05 22:52:56
如果你只參考第一場比賽,那麼是否需要/ g? – 2011-01-05 22:53:15
aka「back references」 – SiegeX 2011-01-05 22:54:03
什麼是\\ 1做的,是否擴展了正則表達式? – Timo 2017-12-13 15:48:44
這是\\ 1的示例:'sed -E -e「s/[^ /] {10}(\\。[^ \\。] +)?$/\\ 1 /」' – Timo 2017-12-13 16:03:55
@Timo :'\ 1'插入第一個捕獲組的內容,該內容是第一組括號之間匹配的內容。我不知道你是否特別要求使用加倍反斜槓的情況,但無論它們是否加倍,似乎都起作用。我不會說這是一個擴展正則表達式的情況,因爲即使在使用基本正則表達式時它也會執行相同的操作。 – 2017-12-13 17:40:10