echo "This is a test string" | sed 's/This/\0/'
首先,我使用正则表达式This
匹配子字符串This
。然后我使用\0
将第一个匹配替换为整个字符串。所以结果应该只是匹配的字符串。
但它打印出整条线。为什么会这样?
答案 0 :(得分:3)
您不会将整个字符串替换为\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
,但是如果我们在括号内有一个可以匹配的正则表达式不同的话,这可能非常有用。
答案 1 :(得分:0)
sed 's/.*\(PatThis\).*/PatThat/'
或
se '/PatThis/ s/.*/PatThat/'
在您的请求中,“PatThis”和“PatThat”包含相同的内容(“This”)。在评论中(
我需要使用\ d \ d \ d \ d选择一个数字,然后将其用作 替换
)你有两个不同的模式PatThis和PatThat \ 1并不是真的需要,因为你知道确切的包含(除非'PatThis'是一个带有特殊字符的正则表达式,如\&amp ;?。)