cut 命令从时间中删除秒数。 shell 脚本
cut command to remove seconds from time. shell scripting
假设我们以
的格式将日期和时间记录到日志中
2022-05-18-11:57:140100
我需要从这个时间中删除秒数。这意味着最终输出应该像
2022-05-18-11:57
我尝试了以下方法
echo "2022-05-18-11:57:140100" | rev | cut -d/ -f6- | rev`:"
这没有成功,我不知道这个剪切命令是如何工作的。谁能解释一下。提前致谢
第一个解决方案: 使用 GNU awk
你可以像下面那样简单地做。简单的解释是,将 FS
和 OFS
设置为 :
,然后在 awk
程序的主块中将 NF
减为 1 并打印该行。
echo "2022-05-18-11:57:140100" | awk 'BEGIN{FS=OFS=":"} NF--'
第二个解决方案:请在任何awk
中使用awk
的match
函数尝试以下。
echo "2022-05-18-11:57:140100" | awk 'match([=11=],/.*:/){print substr([=11=],RSTART,RLENGTH-1)}'
第三个解决方案:使用sed
捕获组的能力(将值保存在临时缓冲区中)请尝试以下代码。
echo "2022-05-18-11:57:140100" | sed -E 's/(^[^:]*):([^:]*):.*/:/'
第四个解决方案(OP 的努力 FIX): 使用 rev
+ cut
+ [ 修复 OP 的努力=24=] 这里的组合。
echo "2022-05-18-11:57:140100" | rev | cut -d':' -f2- | rev
这可以在 bash shell 中轻松完成,另外:
s='2022-05-18-11:57:140100'
echo "${s%:*}"
2022-05-18-11:57
# or else use cut
cut -d: -f1-2 <<< "$s"
2022-05-18-11:57
# or sed
sed 's/:[^:]*$//' <<< "$s"
2022-05-18-11:57
这 5 种解决方案中的任何一种都适用于 gawk
、mawk-1
、mawk-2
和 macos nawk
:
echo "2022-05-18-11:57:140100" |
mawk2 NF=NF FS=':[^:]*$' OFS=
or
gawk -- --NF FS=':[^:]*$'
or
gawk NF-- FS=':[^:]*$'
or
nawk NF=1 FS=':[^:]*$'
or
mawk '$!_=$!_' FS=':[^:]*$'
2022-05-18-11:57
最紧凑的版本应该是
mawk -F':[^:]*$' NF--
假设我们以
的格式将日期和时间记录到日志中2022-05-18-11:57:140100
我需要从这个时间中删除秒数。这意味着最终输出应该像
2022-05-18-11:57
我尝试了以下方法
echo "2022-05-18-11:57:140100" | rev | cut -d/ -f6- | rev`:"
这没有成功,我不知道这个剪切命令是如何工作的。谁能解释一下。提前致谢
第一个解决方案: 使用 GNU awk
你可以像下面那样简单地做。简单的解释是,将 FS
和 OFS
设置为 :
,然后在 awk
程序的主块中将 NF
减为 1 并打印该行。
echo "2022-05-18-11:57:140100" | awk 'BEGIN{FS=OFS=":"} NF--'
第二个解决方案:请在任何awk
中使用awk
的match
函数尝试以下。
echo "2022-05-18-11:57:140100" | awk 'match([=11=],/.*:/){print substr([=11=],RSTART,RLENGTH-1)}'
第三个解决方案:使用sed
捕获组的能力(将值保存在临时缓冲区中)请尝试以下代码。
echo "2022-05-18-11:57:140100" | sed -E 's/(^[^:]*):([^:]*):.*/:/'
第四个解决方案(OP 的努力 FIX): 使用 rev
+ cut
+ [ 修复 OP 的努力=24=] 这里的组合。
echo "2022-05-18-11:57:140100" | rev | cut -d':' -f2- | rev
这可以在 bash shell 中轻松完成,另外:
s='2022-05-18-11:57:140100'
echo "${s%:*}"
2022-05-18-11:57
# or else use cut
cut -d: -f1-2 <<< "$s"
2022-05-18-11:57
# or sed
sed 's/:[^:]*$//' <<< "$s"
2022-05-18-11:57
这 5 种解决方案中的任何一种都适用于 gawk
、mawk-1
、mawk-2
和 macos nawk
:
echo "2022-05-18-11:57:140100" |
mawk2 NF=NF FS=':[^:]*$' OFS=
or
gawk -- --NF FS=':[^:]*$'
or
gawk NF-- FS=':[^:]*$'
or
nawk NF=1 FS=':[^:]*$'
or
mawk '$!_=$!_' FS=':[^:]*$'
2022-05-18-11:57
最紧凑的版本应该是
mawk -F':[^:]*$' NF--