当前位置:  开发笔记 > 运维 > 正文

正则表达式:用'...'替换15号后的所有字符

如何解决《正则表达式:用''替换15号后的所有字符》经验,为你挑选了2个好方法。

我试图用linux中的'sed'做一些简单的格式化东西,我需要使用正则表达式在第15个字符后修剪一个字符串,并在末尾附加一个'...'.像这样的东西:

before: this is a long string that needs to be shortened
after: this is a long ...

任何人都可以告诉我如何将其作为正则表达式编写,并且如果可能的话解释它是如何工作的,这样我可以更好地学习正则表达式?



1> Konrad Rudol..:

以下适用于我:

echo "This is a test with more than 15 characters" | sed "s/\(.\{15\}\).\+$/\1…/"

这里发生的是我们匹配任何字符(.)15次({15}).我们捕获括号内匹配的文本.以下部分(.+$)匹配所有其余部分,直到行尾.我们用在括号(\1)中捕获的任何内容替换它,然后是双曲线省略号.

为了满足sed正则表达式方言(BRE),我们必须逃避一些角色.


应该使用.+而不是.*,以便它不匹配正好15个字符的字符串.

2> The Archetyp..:

Konrand Rudolph回答的解释,因为你要求解释(啊,正如我写的那样,Konrad也加了他自己的解释!)

 sed "s/\(.\{15\}\).+$/\1…/"

\( 

启动一个组 - 请求regexp引擎记住parens中的内容,并将第一个这样的组分配给\ 1,将第二个分配给\ 2等.我们只需要\ 1这里

.

匹配任何东西

\{15\}

...... 15次.

\)

结束小组.所以\ 1将包含前15个字符

 .+

再次匹配任何东西 +表示"一次或多次",因此将匹配超出我们上面匹配的15个字符的字符,...

 $

......直到最后一行

现在替换位:

\1

替换为\ 1的内容

...

和三个点.

完成!

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有