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'