使用sed在大括号中提取子字符串

时间:2014-11-21 08:29:29

标签: bash sed

我现在有一个字符串如下:

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

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

之间的值

我对Sed没有经验,说实话我发现它有点神秘。

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

我做错了什么?

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

4 个答案:

答案 0 :(得分:4)

这与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

答案 1 :(得分:3)

获取{}

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

答案 2 :(得分:2)

这可能有效

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

测试

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

Wed Nov 19 14:17:32 2014

<强>正则表达式

  • [^{]*匹配{以外的任何内容,即integration@

  • ([^}]*)捕获组1

    • \{匹配{

    • [^}]*匹配}以外的任何内容,即Wed Nov 19 14:17:32 2014

    • \}}

    • 相匹配
  • .*与其他

  • 相匹配

答案 3 :(得分:1)

简单地说,下面的命令也可以得到数据......

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