我目前有以下字符串:
integration@{Wed Nov 19 14:17:32 2014} branch: thebranch
这段文字包含在一个文件中,我需要解析字符串。但是我想要大括号{Wed Nov 19 14:17:32 2014}
之间的值。
我对Sed没有任何经验,而且说实话我觉得它有点晦涩难懂。
到目前为止,我已经使用了以下命令,但输出仍然是整个字符串。
我做错了什么?
sed -e 's/[^/{]*"\([^/}]*\).*/\1/'
{
和 }
之间的值。$ 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
这可能会起作用
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
\}
匹配 }
.*
匹配剩余的内容
echo "integration@{Wed Nov 19 14:17:32 2014} branch: thebranch" | sed 's/.*{\(.*\)}.*/\1/g'