当前位置: 首页 > 知识库问答 >
问题:

如何使用sed替换regex捕获组?

华景明
2023-03-14
lolsed_bulsh.png
/full/path/lolsed_bullsh.png

我很难匹配和捕捉这些。目前我正在尝试以下变体:

cat myfile.txt| sed s/\(.+\)\.png/\/full\/path\/\1/g | ack /full/path

我认为sed有一些regex或捕获组行为我不理解

共有1个答案

百里俭
2023-03-14

sed使用POSIX BRE,BRE不支持一个或多个量化符+。仅在POSIX ERE中支持量词+。但是,POSIX sed使用BRE,没有切换到ERE的选项。

如果要保持可移植性,请使用..*来模拟.+

或者如果您可以假设代码始终在GNU sed上运行,那么您可以使用GNU扩展名.\+。或者,您也可以使用GNU extension-r标志切换到POSIX ERE。Higuaro回答中的-e标志已被标记为包含在POSIX.1第8期中,并存在于POSIX.1-202X草案1(2020年6月)中。

 类似资料:
  • 问题内容: 我在字符串前后有HTML代码: 我想将替换为: 所以我做了一个简单的正则表达式: 但是我看不到如何专门替换捕获的块。 有没有办法用其他字符串替换捕获的结果($ 1)? 结果将是: 问题答案: 一种解决方案是为前面和后面的文本添加捕获:

  • 问题内容: 我有一个文件“ test.txt”,其中包含以下内容 我要做的是将它们替换为: 但是为什么这段代码不起作用? 什么是正确的方法? 问题答案: 使用代替。并添加标志以替换所有内容。

  • 问题内容: 假设我要更改为。 通过我可以做到这一点,如下所示: 如何在Python中进行类似的替换?我试过了: 问题答案: 您需要转义反斜杠: 或者,您可以像使用正则表达式一样使用原始字符串:

  • 问题内容: 我一直在网上寻找这个答案,但似乎找不到。 我有一个配置文件,其中包含: 我想将VAR5的值从VALUE5更改为VALUE10。不幸的是,我不知道VALUE5的值,因此无法搜索。因此,基本上我需要使用sed(或其他任何值)将VAR5的值替换为我想替换为的任何值。 问题答案: 您可以尝试使用此sed: 它给:

  • 问题内容: 是否可以在sed中指定非捕获组? 如果是这样,怎么办? 问题答案: 答案是,截至撰写时,您不能-sed不支持它。Sed支持BRE和ERE,但不支持PCRE。 (注:一个答案指出BRE也称为POSIX sed,而ERE是通过sed -r的GNU扩展。有一点仍然是sed不支持PCRE。) Perl适用于Windows或Linux 这里的例子 https://superuser.com/qu

  • 问题内容: 尝试用sed替换字符串时发生奇怪的事情。这有效: 因此,当我手动键入字符串时,它可以工作。但在以下情况下,不会发生替换: 当我回显这两个变量PATTERN和REPLACEMENT时,它们具有正确的值。 我试图用配置目录中所有文件中的替换字符串替换所有出现的模式字符串。 问题答案: 尝试 代替。’引号不会扩展变量。