我试图用linux中的'sed'做一些简单的格式化东西,我需要使用正则表达式在第15个字符后修剪一个字符串,并在末尾附加一个'...'.像这样的东西:
before: this is a long string that needs to be shortened after: this is a long ...
任何人都可以告诉我如何将其作为正则表达式编写,并且如果可能的话解释它是如何工作的,这样我可以更好地学习正则表达式?
以下适用于我:
echo "This is a test with more than 15 characters" | sed "s/\(.\{15\}\).\+$/\1…/"
这里发生的是我们匹配任何字符(.
)15次({15}
).我们捕获括号内匹配的文本.以下部分(.+$
)匹配所有其余部分,直到行尾.我们用在括号(\1
)中捕获的任何内容替换它,然后是双曲线省略号.
为了满足sed
正则表达式方言(BRE),我们必须逃避一些角色.
Konrand Rudolph回答的解释,因为你要求解释(啊,正如我写的那样,Konrad也加了他自己的解释!)
sed "s/\(.\{15\}\).+$/\1…/" \(
启动一个组 - 请求regexp引擎记住parens中的内容,并将第一个这样的组分配给\ 1,将第二个分配给\ 2等.我们只需要\ 1这里
.
匹配任何东西
\{15\}
...... 15次.
\)
结束小组.所以\ 1将包含前15个字符
.+
再次匹配任何东西 +表示"一次或多次",因此将匹配超出我们上面匹配的15个字符的字符,...
$
......直到最后一行
现在替换位:
\1
替换为\ 1的内容
...
和三个点.
完成!