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

Bash 使用sed提取花括号中的子字符串,bash,sed,Bash,Sed,我目前有一个字符串,如下所示: integration@{Wed Nov 19 14:17:32 2014} branch: thebranch 这包含在一个文件中,我解析字符串。但是我想要括号中的值{Wed Nov 19 14:17:32 2014} 我对Sed没有任何经验,老实说,我觉得它有点神秘 到目前为止,我已经成功地使用了以下命令,但是输出仍然是整个字符串 我做错了什么 sed -e 's/[^/{]*"\([^/}]*\).*/\1/' 这可能有用 sed -e 's/[^{]*

我目前有一个字符串,如下所示:

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

我对Sed没有任何经验,老实说,我觉得它有点神秘

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

我做错了什么

sed -e 's/[^/{]*"\([^/}]*\).*/\1/'
这可能有用

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

2014年11月19日星期三14:17:32

Regex

  • [^{]*
    匹配除
    {
    之外的任何内容,即
    集成@

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

    • \{
      匹配
      {

    • [^}]*
      匹配除
      }
      之外的任何内容,即
      周三2014年11月19日14:17:32

    • \}
      匹配一个
      }

    • $ sed 's/^[^{]*{\([^{}]*\)}.*/\1/' file
      Wed Nov 19 14:17:32 2014
      
  • *
    与其余部分匹配


获取介于
{
}

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

这对于
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

简单地说,下面的命令也可以获取数据

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