我正在开发一个小脚本,它从reflog中获取信息,并尝试将日期和分支名称分开。
日期解析似乎适用于第四个空格here with sample text,但不适用于sed
。
我只是开始猜测解析发布的尝试,因为我想首先修复sed
问题。
示例输入: Jul 2 15:16:41 2012 modif-for-release@{Thu Nov 27 14:24:56 2014} branch: Created from refs/remotes/origin/modif-for-release
预期输出: Jul 2 15:16:41 2012
我正在使用Mac btw。
function getRelease(){
git for-each-ref --count=1000 --shell \
--format="%(refname)" 'refs/remotes/origin/*release*'|
while read entry; do
#GET BRANCHES THEN...#
git reflog --date="local" --pretty='%cd %gd %gs' "$y" | grep "branch:" > reflog.txt;
string=$(cat reflog.txt);
date=$(echo "$string" | sed -e -i '^(.*?)(.\d{4})'); #http://regexr.com/39vqa
branch=$(echo "$string" | sed -e 's/[^ ]* //');
echo ${date};
echo ${branch};
done
}
答案 0 :(得分:1)
对于这种特殊情况,当空格数量有限时,您可能想要使用cut
:
cut -d' ' -f1-4 file
或
date=$(cut -d' ' -f1-4 <<< "$string")
从字段1到fiel4的打印,由分隔符空间定义。
$ cat a
Jul 2 15:16:41 2012 modif-for-release@{Thu Nov 27 14:24:56 2014} branch: Created from refs/remotes/origin/modif-for-release
$ cut -d' ' -f1-4 a
Jul 2 15:16:41 2012
如果您真的想使用sed
,请抓住这些组并将其打印回来:
$ sed -r 's/(([^ ]+ ){3})([^ ]+).*$/\1\3/' a
Jul 2 15:16:41 2012
$ sed -r 's/([^ ]+ [^ ]+ [^ ]+ [^ ]+).*$/\1/' a
Jul 2 15:16:41 2012
答案 1 :(得分:0)
这应该做:
awk '{print $1,$2,$3,$4}' file
答案 2 :(得分:0)
至于您的示例输入,您也可以像这样使用sed
:
sed 's/ modif-for-release.*$//'
示例:强>
sed 's/ modif-for-release.*$//' <<< "Jul 2 15:16:41 2012 modif-for-release@{Thu Nov 27 14:24:56 2014} branch: Created from refs/remotes/origin/modif-for-release"
Jul 2 15:16:41 2012