Bash 在shell脚本中剪切行/字符串的一部分

Bash 在shell脚本中剪切行/字符串的一部分,bash,shell,cut,Bash,Shell,Cut,我有以下几行: Jan 13, 2014 1:01:31 AM 我想删除该行的秒部分。结果应该是: Jan 13, 2014 1:01 AM 如何做到这一点?使用sed: s='Jan 13, 2014 1:01:31 AM' sed 's/:[0-9]*\( [AP]M\)/\1/' <<< "$s" Jan 13, 2014 1:01 AM s='2014年1月13日凌晨1:01:31' sed的/:[0-9]*\([AP]M\)/\1/'使用sed: s='Jan

我有以下几行:

Jan 13, 2014 1:01:31 AM
我想删除该行的秒部分。结果应该是:

Jan 13, 2014 1:01 AM
如何做到这一点?

使用sed:

s='Jan 13, 2014 1:01:31 AM'
sed 's/:[0-9]*\( [AP]M\)/\1/' <<< "$s"
Jan 13, 2014 1:01 AM
s='2014年1月13日凌晨1:01:31'
sed的/:[0-9]*\([AP]M\)/\1/'使用sed:

s='Jan 13, 2014 1:01:31 AM'
sed 's/:[0-9]*\( [AP]M\)/\1/' <<< "$s"
Jan 13, 2014 1:01 AM
s='2014年1月13日凌晨1:01:31'

sed的/:[0-9]*\([AP]M\)/\1/'使用参数展开:

t='Jan 13, 2014 1:01:31 AM'
ampm=${t: -2}               # last two characters
echo "${t%:*} $ampm"        # remove everything after the last :

使用参数展开:

t='Jan 13, 2014 1:01:31 AM'
ampm=${t: -2}               # last two characters
echo "${t%:*} $ampm"        # remove everything after the last :

您可以尝试一下:

sed 's/:[^:]* / /'
以你的例子:

kent$ (master|✚2) echo "Jan 13, 2014 1:01:31 AM"|sed 's/:[^:]* / /'
Jan 13, 2014 1:01 AM

您可以尝试一下:

sed 's/:[^:]* / /'
以你的例子:

kent$ (master|✚2) echo "Jan 13, 2014 1:01:31 AM"|sed 's/:[^:]* / /'
Jan 13, 2014 1:01 AM

另一种方法是,如果date命令是支持-d选项的gnudate

$ str="Jan 13, 2014 1:01:31 AM"

$ date -d "$str" +"%b %d, %Y %l:%M %p"

Jan 13, 2014  1:01 AM

另一种方法是,如果date命令是支持-d选项的gnudate

$ str="Jan 13, 2014 1:01:31 AM"

$ date -d "$str" +"%b %d, %Y %l:%M %p"

Jan 13, 2014  1:01 AM

如果您指出如何获得这一行会更好,因为我们可以尝试更改
日期
输出格式。如果您指出如何获得这一行会更好,因为我们可以尝试更改
日期
输出格式。+1,这是最有效的方式,与生成其他进程(如sed)不同。+1,这是最有效的方法,不像生成其他进程,如sed。