echo "This is a test string" | sed 's/This/\0/'
首先我使用正則表達式This
匹配子串This
。然後我用\0
替換第一個匹配的整個字符串。所以結果應該只是匹配的字符串。爲什麼不sed正確解釋這個正則表達式?
但它打印出整條線。這是爲什麼?
echo "This is a test string" | sed 's/This/\0/'
首先我使用正則表達式This
匹配子串This
。然後我用\0
替換第一個匹配的整個字符串。所以結果應該只是匹配的字符串。爲什麼不sed正確解釋這個正則表達式?
但它打印出整條線。這是爲什麼?
您不用\0
替換整個字符串,只是模式匹配,即This
。換句話說,你用This
代替This
。
要與This
更換整條生產線,你可以這樣做:
echo "This is a test string" | sed '/This/s/.*/This/'
它看起來匹配This
線,並用其替換This
整條生產線。在此情況下(由於只有一條線),你也可以這樣做:
echo "This is a test string" | sed 's/.*/This/'
如果你想重用了比賽,那麼你可以做
echo "This is a test string" | sed 's/.*\(This\).*/\1/'
\(
和\)
用來記住在他們內部匹配。它可以參考爲\1
(如果您有多對\(
和\)
,那麼您也可以使用\2
,\3
,...)。
在以上示例是不是非常有幫助,因爲我們知道這裏面\(
和\)
這個詞This
,但如果我們有可以匹配不同的詞在括號內一個正則表達式,這是非常有益的。
替換必須從字符串中選擇。也許我用了一個錯誤的例子來說明我的問題。我需要使用'\ d \ d \ d \ d'選擇一個數字,然後用它作爲替換。所以你的建議是行不通的。 –
編輯我的答案。 – pfnuesel
sed因爲某些原因需要你跳過括號,試試'。*(This)。*'在regexpal上。 –
sed 's/.*\(PatThis\).*/PatThat/'
或
se '/PatThis/ s/.*/PatThat/'
在您的要求 「PatThis」 和 「PatThat」 是相同的含有( 「本」)。在評論(
我需要使用來選擇號碼\ d \ d \ d \ d,然後用它作爲 更換
),你必須爲模式PatThis和PatThat 2個不同的值 \ 1不是真的需要,因爲你知道確切的內容(除非'PatThis'是一個帶有特殊字符的正則表達式,例如\ & ?.)
你想用'\ 0'打印什麼?字面上,字符串'\ 0'? – fedorqui
@fedorqui不,我打算使用第一個正則表達式匹配,而不是字面字符串'\ 0' –
正如pfnuesel所說,你用同一個字符串替換了一個字符串,所以結果是一樣的。做例如'sed's/This/\ 0AA /''來看看它。 – fedorqui