Shell 基于时间和日期的格式 - 不能添加超过几个字符串文字
Shell based time and date formatting - can't add in more than a few string literals
我根据手册页拼凑而成,只是略读了一下:
$date +'%m.%d.%Y'\ "%r"\ %z
05.03.2015 12:54:11 PM -0700
这给出:
05.03.2015 12:54:11 PM -0700
尽可能接近我想要的:
05.03.2015 - 12:54:11 PM -0700
我好像听不懂中间的破折号。如果我逃避它,我可以像上面那样使用 space ;看起来 %
文字是通过用另一个百分比转义百分比来完成的,例如:%%
有一个 %n
用于换行,还有很少的其他修饰符。如何连接由破折号分隔的两个?
而且我很乐意像在其他语言中一样以日期格式来完成这一切。我真的不想通过管道传输到 sed 或 awk 或用“-”替换第一个 space。
我设法让它工作了。我只需要逃避我尝试过的 spaces,但由于某种原因,没有立即奏效。正如您将看到的,这是一团糟,这就是我搞砸的地方。但它现在有效,我认为它也是正确的。我删除了尾随 "g" 全局修饰符,因为我只想要第一个 space edited/altered:
$date +'%m.%d.%Y'\ "%r"\ %z | sed s/\ /\ -\ /
>05.03.2015 - 01:06:39 PM -0700
我很困惑你有什么问题。在 Mac (10.10.3) 上进行测试,我只是在格式字符串中包含破折号,键入:
$ date +'%m.%d.%Y – %r %z'
05.03.2015 – 04:24:26 PM -0700
$ date +'%m.%d.%Y – %r %z' | utf8-unicode
(standard input):
0x30 = U+0030
0x35 = U+0035
0x2E = U+002E
0x30 = U+0030
0x33 = U+0033
0x2E = U+002E
0x32 = U+0032
0x30 = U+0030
0x31 = U+0031
0x35 = U+0035
0x20 = U+0020
0xE2 0x80 0x94 = U+2013
0x20 = U+0020
0x30 = U+0030
0x34 = U+0034
0x3A = U+003A
0x32 = U+0032
0x34 = U+0034
0x3A = U+003A
0x34 = U+0034
0x33 = U+0033
0x20 = U+0020
0x50 = U+0050
0x4D = U+004D
0x20 = U+0020
0x2D = U+002D
0x30 = U+0030
0x37 = U+0037
0x30 = U+0030
0x30 = U+0030
0x0A = U+000A
$
我只是在格式字符串中包含了破折号。现在,这是在 UTF-8 终端中,所以这可能是部分差异的原因。我碰巧知道 Mac 键盘上短划线 (–) 和长短划线 (—) 的按键顺序 (Option- 和 ShiftOption-,其中 -是 'hyphen-minus' 键)。如果您不在 Mac 上,按键顺序会有所不同。
请注意,我通过将它们全部包含在格式字符串参数周围的单引号内来避免转义空格。第一个引号的位置是'cosmetic'; shell 将其删除,无论它是否存在或 date '+%m.…'
并且 date
永远不会看到单引号。
最好将整个格式字符串(单引号)作为一个引号,而不是像您那样混合使用单引号、双引号和反斜杠转义。我当然认为这是最清晰的写法:
date +'%m.%d.%Y - %r %z'
您只需在 %Y
之后立即添加带有 space 的短划线 -
,使其保留在引号内:
date +'%m.%d.%Y -'\ "%r"\ %z
我根据手册页拼凑而成,只是略读了一下:
$date +'%m.%d.%Y'\ "%r"\ %z
05.03.2015 12:54:11 PM -0700
这给出:
05.03.2015 12:54:11 PM -0700
尽可能接近我想要的:
05.03.2015 - 12:54:11 PM -0700
我好像听不懂中间的破折号。如果我逃避它,我可以像上面那样使用 space ;看起来 %
文字是通过用另一个百分比转义百分比来完成的,例如:%%
有一个 %n
用于换行,还有很少的其他修饰符。如何连接由破折号分隔的两个?
而且我很乐意像在其他语言中一样以日期格式来完成这一切。我真的不想通过管道传输到 sed 或 awk 或用“-”替换第一个 space。
我设法让它工作了。我只需要逃避我尝试过的 spaces,但由于某种原因,没有立即奏效。正如您将看到的,这是一团糟,这就是我搞砸的地方。但它现在有效,我认为它也是正确的。我删除了尾随 "g" 全局修饰符,因为我只想要第一个 space edited/altered:
$date +'%m.%d.%Y'\ "%r"\ %z | sed s/\ /\ -\ /
>05.03.2015 - 01:06:39 PM -0700
我很困惑你有什么问题。在 Mac (10.10.3) 上进行测试,我只是在格式字符串中包含破折号,键入:
$ date +'%m.%d.%Y – %r %z'
05.03.2015 – 04:24:26 PM -0700
$ date +'%m.%d.%Y – %r %z' | utf8-unicode
(standard input):
0x30 = U+0030
0x35 = U+0035
0x2E = U+002E
0x30 = U+0030
0x33 = U+0033
0x2E = U+002E
0x32 = U+0032
0x30 = U+0030
0x31 = U+0031
0x35 = U+0035
0x20 = U+0020
0xE2 0x80 0x94 = U+2013
0x20 = U+0020
0x30 = U+0030
0x34 = U+0034
0x3A = U+003A
0x32 = U+0032
0x34 = U+0034
0x3A = U+003A
0x34 = U+0034
0x33 = U+0033
0x20 = U+0020
0x50 = U+0050
0x4D = U+004D
0x20 = U+0020
0x2D = U+002D
0x30 = U+0030
0x37 = U+0037
0x30 = U+0030
0x30 = U+0030
0x0A = U+000A
$
我只是在格式字符串中包含了破折号。现在,这是在 UTF-8 终端中,所以这可能是部分差异的原因。我碰巧知道 Mac 键盘上短划线 (–) 和长短划线 (—) 的按键顺序 (Option- 和 ShiftOption-,其中 -是 'hyphen-minus' 键)。如果您不在 Mac 上,按键顺序会有所不同。
请注意,我通过将它们全部包含在格式字符串参数周围的单引号内来避免转义空格。第一个引号的位置是'cosmetic'; shell 将其删除,无论它是否存在或 date '+%m.…'
并且 date
永远不会看到单引号。
最好将整个格式字符串(单引号)作为一个引号,而不是像您那样混合使用单引号、双引号和反斜杠转义。我当然认为这是最清晰的写法:
date +'%m.%d.%Y - %r %z'
您只需在 %Y
之后立即添加带有 space 的短划线 -
,使其保留在引号内:
date +'%m.%d.%Y -'\ "%r"\ %z