如何为 sed 创建一个简单的正则表达式?
Posted
技术标签:
【中文标题】如何为 sed 创建一个简单的正则表达式?【英文标题】:How can I create a simple regexp for sed? 【发布时间】:2021-09-12 03:22:51 【问题描述】:这是我得到的文本文件 #1:
abc:
xyz: Hi ***!
x-cool-value: v5
还有一个:
abc:
xyz: Hi ***!
x-cool-value: foobar/v7
所以对于第一个文件我想提取v5
和#2:v7
。 x-cool-value
始终是常量/存在于输入文本文件中。
我想出了:
$ sed -n 's/^ *x-cool-value: *//p' foo.yaml
# return either `v2` or `foobar/v7`
但不确定如何使其适用于两个测试文件。
【问题讨论】:
如果这是 YAML,请使用 YAML 解析器。 【参考方案1】:好吧,那肯定行不通。通过添加: *
,您只是在说“冒号后跟零个或多个空格”。如果您想要的是空格后的整行,那效果很好。但是如果你想跳过的不仅仅是空格,你必须让你的正则表达式匹配你想跳过的东西。
看起来,尽管您实际上并没有定义它,但您希望跳过所有空格PLUS 直到并包括最后一个 /
的所有字符(如果存在)。另一种解释你想要的方式是,所有字符直到并包括 first /
但既然你没有说我选择实现前者。
可以这样做:
sed -n 's,^ *x-cool-value: *\(.*/\)*,,p' foo.yaml
我在这里将正则表达式分隔符从/
更改为,
,但你可以选择任何你喜欢的:我不想使用/
,因为它出现在正则表达式中。
额外的位\(.*/\)*
表示匹配一组以/
结尾的字符,零次或多次。
建议您去寻找一本书或一个网站,该书或网站可以为您提供一些关于正则表达式的说明。对于想要在 Linux 和 MacOS 等 POSIX 系统中执行任何类型的非平凡脚本的任何人来说,它们都非常有用且绝对需要。
【讨论】:
以上是关于如何为 sed 创建一个简单的正则表达式?的主要内容,如果未能解决你的问题,请参考以下文章