如何在bash中修剪字符串并从字符串中删除字符?

时间:2017-08-22 16:21:17

标签: bash

我有这个:

$ git show -s --format=%ci HEAD
2017-08-21 20:35:28 +0200

如何修剪第一个空格处的字符串,然后删除破折号,以便最终得到一个值为20170821的环境变量?

我试过这个,但它没有工作......:

MYDATE=`git show -s --format=%ci HEAD`
MYDATE=${MYDATE%" "} # trim at the first space
MYDATE=${MYDATE//-}. # remove dashes

3 个答案:

答案 0 :(得分:4)

替换${MYDATE%" "}将从字符串末尾删除单个空格。为了匹配空格,我们需要添加*,为了删除最长的匹配子字符串,我们需要%%而不是%。我们不需要在替换中引用空格,因此最简单的等价物是${MYDATE%% *}

演示:

$ MYDATE='2017-08-21 20:35:28 +0200'
$ echo ${MYDATE%% *}
2017-08-21

通过粗略阅读git show文档,看来you can get the output in the format you want,无需随后进行任何额外的工作:

git show -s --format=%cd --date=short HEAD

# Or, using a standard `strftime` format string:
git show -s --format=%cd --date=format:%F HEAD

这两者都给出了ISO-8601格式的日期;如果你想要它没有-分隔符,那么你需要一个格式字符串%Y%m%d

git show -s --format=%cd --date=format:%Y%m%d HEAD

答案 1 :(得分:2)

要操纵字符串以使其与所需输出匹配,请使用:

${MYDATE/ */}

它会在找到的第一个空格之前提取子字符串。

编辑:为了详细说明,这是substring replacement,我们只是使用一个短表达式来匹配第一个空格之后的所有内容并将其替换为空。另外,我刚刚注意到问题的“删除破折号”部分,您可以使用以下语句:

tr -d '-' <<< ${MYDATE/ */}

将导致20170821

答案 2 :(得分:0)

简单的方法 - 如果您不想专注于git实用程序并考虑使用bash命令来操作字符串输出 - 请使用 cut

MYDATE=`git show -s --format=%ci HEAD | cut -d' ' -f1`