首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sed通过regex捕获组替换文件中的字符串

使用sed通过regex捕获组替换文件中的字符串
EN

Stack Overflow用户
提问于 2014-12-29 14:11:42
回答 1查看 1.6K关注 0票数 1

我一开始就说我在shell脚本上很新,所以请不要开枪!)

我有一个包含以下文本的文件:

代码语言:javascript
复制
1   :    / 
2   :    /string-1/ 
4   :    /string-2/ 
5   :    /string-3/

我喜欢删除字符串的末尾斜杠,结果应该是:

代码语言:javascript
复制
1   :    / 
2   :    string-1 
4   :    string-2 
5   :    string-3

我已经尝试使用sed,如下所示:

代码语言:javascript
复制
local_export_folder="/home/merianos/Documents/repositories/DatabaseBackup/tmp"

sed -i -e 's/\/([^\/]+)\//\1/' ${local_export_folder}/blogs.csv

但这不管用。

我做错什么了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-29 14:24:38

这对我来说很管用:

代码语言:javascript
复制
sed 's#/\([^/]*\)/#\1#' file

这捕获了两个正斜杠之间的任何内容。替换是内容,没有斜杠。

您可能一直面临的一个问题是,+ (一个或多个)并不能为sed的所有版本所理解。我已经把它改成了* (意思是零或更多),它得到了更广泛的认可。如果您愿意,可以使用符合POSIX的\{1,\}来表示一个或多个。

输出:

代码语言:javascript
复制
$ sed 's#/\([^/]*\)/#\1#' file
1   :    /
2   :    string-1
4   :    string-2
5   :    string-3

根据您的sed版本,您可能可以使用-r-E开关来启用扩展正则表达式。这意味着,不需要将括号作为捕获组使用转义,并且可以理解+

代码语言:javascript
复制
sed -r 's#/([^/]+)/#\1#' file
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27690469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档