linux - 通过 shell 脚本拆分字符串变量

标签 linux shell tcl

我有一个包含日期和时间的字符串 timestamp= 12-12-2012 16:45:00

我需要将其重新格式化为 timestamp= 16:45:00 12-12-2012

如何在 shell 脚本中实现这一点?

请注意:变量的值为12-12-2012 16:45:00时间戳是变量的名称

#!usr/bin/expect
set timestamp "16:45:00 12-12-2012"
Now what should i do so value of timestamp will become 12-12-2012 16:45:00
script extention is .tcl example test.tcl

最佳答案

您可以使用可变模式删除。 ## 的意思是“贪婪地删除所有匹配模式的东西,从左边开始”。 %% 从右开始表示相同:

tm=${timestamp##* }
dt=${timestamp%% *}
result="$tm $dt"

或者您可以使用 cut 来做同样的事情,给出一个字段分隔符:

tm=$(echo $timestamp | cut -f2 -d' ')
dt=$(echo $timestamp | cut -f1 -d' ')
result="$tm $dt"

或者您可以使用 sed 将它们与正则表达式交换(参见其他帖子)。

或者如果您从日期命令中提取日期,您可以要求它为您格式化:

result=$(date +'%r %F')

就此而言,您可能有一个 date 版本可以解析您的日期,然后让您按照自己的意愿表达它:

result=$(date -d '12/12/2012 4:45 pm' +'%r %F')

诚然,这最后一个对日期输入很挑剔......有关可接受的输入的信息,请参阅“信息日期”。

如果你想使用正则表达式,我喜欢 Perl 的...它们写起来更简洁:

echo $timestamp | perl -p -e 's/^(\S+)\s+(\S+)/$2 $1/'

其中\S 匹配非空格字符,+ 表示“一个或多个”,\s 匹配空格。 parens 捕获匹配的部分。

编辑:

抱歉,没有意识到“timestamp=”是实际数据的一部分。如果您首先删除该位,则上述所有示例均有效:

var='timestamp=2012-12-12 16:45:11'
timestamp=${var#timestamp=}
... then as above ...

关于linux - 通过 shell 脚本拆分字符串变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13983428/

相关文章:

ubuntu - 如何在 ubuntu 18.04 中安装 ltcl3.2

python - 为什么我会收到此布料放置错误?

python - subprocess.popen 在 cronjob 中不返回任何输出

c++ - 将枚举传递给 C++ 中的函数

linux - 对 bash 脚本命令行参数完全困惑

tcl - 是否有 "native"方法将 Tcl 中的数字转换为 dB

linux - 当我通过 expect 使用 scp 命令时,星号无法识别

java - 以编程方式将 Java 应用程序添加到启动

regex - 如何从正则表达式中获取所有匹配项?

Linux Bourne shell - 目录可写检查始终返回 "Not Writable"