繁体   English   中英

在sed中使用正则表达式查找和替换

[英]Find and replace using regex in sed

我要更换

# Bulk Delete #

=== Bulk Delete ===

我正在使用以下sed命令。

sed "s/#\([^#]*\)#/===\1===/g" filename

它有效,但也可以替代

### Translation

======# Translation

如何防止它并使它在mac和ubuntu中都能工作?

最简单的方法就是也匹配空白:

sed 's/# \([^#]*\) #/=== \1 ===/g' filename

另一种方法是在两个哈希之间要求多个(一个或多个)非哈希:

sed 's/#\([^#]\{1,\}\)#/===\1===/g' filename

\\{n,m\\}是一个量词符号,需要至少n个出现且最多m个出现在紧接其之前的模式,因此它是?泛化? *+元字符(可以分别由\\{0,1\\}\\{0,\\}\\{1,\\} )。 如果缺少m ,则表示不小于n的任何数字; 如果n丢失,则表示不大于m的任何数字,因此等于0。在我的示例中,我将其用作经典的可移植版本(适用于Linux和Mac OS X的sed史前版本)。 +

另一种书写方式是:

sed 's/#\([^#][^#]*\)#/===\1===/g' filename

当然,您可以结合这些想法:

sed 's/# \([^#][^#]*\) #/=== \1 ===/g' filename
sed 's/# \([^#]\{1,\}\) #/=== \1 ===/g' filename

您可以使用+强制执行至少一个非#字符

由于OSX中的sed默认不支持增强的正则表达式语法,例如+ ,因此您需要将-E标志传递给sed。 好消息是-E标志也可以在*nix系统上很好地工作。 使用-E标志时,可以跳过转义特殊的正则表达式字符,例如+(等。

sed -E "s/#([^#]+)#/===\1===/g" filename

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM