使用sed提取花括号中的子字符串

8

我目前有以下字符串:

integration@{Wed Nov 19 14:17:32 2014} branch: thebranch

这段文字包含在一个文件中,我需要解析字符串。但是我想要大括号{Wed Nov 19 14:17:32 2014}之间的值。

我对Sed没有任何经验,而且说实话我觉得它有点晦涩难懂。

到目前为止,我已经使用了以下命令,但输出仍然是整个字符串。

我做错了什么?

sed -e 's/[^/{]*"\([^/}]*\).*/\1/'
4个回答

6
获取在 {} 之间的值。
$ sed 's/^[^{]*{\([^{}]*\)}.*/\1/' file
Wed Nov 19 14:17:32 2014

5

使用 awk 很容易做到这一点,不需要复杂的正则表达式。

awk -F"{|}" '{print $2}' file
Wed Nov 19 14:17:32 2014

它将字段分隔符设置为{},然后您的数据将在第二个字段中。

您可以像这样设置FS

awk -F"[{}]" '{print $2}' file

要查看所有字段:
awk -F"{|}" '{print "field#1="$1"\nfield#2="$2"\nfield#3="$3}' file
field#1=integration@
field#2=Wed Nov 19 14:17:32 2014
field#3= branch: thebranch

2

这可能会起作用

sed -e 's/[^{]*\({[^}]*}\).*/\1/g'

测试

$ echo "integration@{Wed Nov 19 14:17:32 2014} branch: thebranch" | sed -e 's/[^{]*{\([^}]*\)}.*/\1/g'

2014年11月19日14:17:32

正则表达式

  • [^{]* 匹配除了 { 以外的任何字符,即匹配 integration@

  • ([^}]*) 捕获第一组

    • \{ 匹配 {

    • [^}]* 匹配除了 } 以外的任何字符,即匹配 2014年11月19日14:17:32

    • \} 匹配 }

  • .* 匹配剩余的内容


1
简单地说,以下命令也可以获取数据...
echo "integration@{Wed Nov 19 14:17:32 2014} branch: thebranch" | sed 's/.*{\(.*\)}.*/\1/g'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接