Bash脚本:使用sed和cut输出特定格式

Bash脚本:使用sed和cut输出特定格式,bash,sed,cut,Bash,Sed,Cut,我正在使用sed和cut编写一个bash脚本,它将以各种方式输入并以特定格式输出时间。下面是一行示例: timeinhour=$(cut -d" " -f2<<<"$line" | sed 's/p/ /' | sed 's/a/ /' | sed 's/am/ /' | sed 's/pm/ /' | sed 's/AM/ /' | sed 's/PM/ /' ) 如果有人有任何建议,我将不胜感激 例如,此输入: 1p 1032AM 419pm 1202a 将产生: 1

我正在使用sed和cut编写一个bash脚本,它将以各种方式输入并以特定格式输出时间。下面是一行示例:

timeinhour=$(cut -d" " -f2<<<"$line" | sed 's/p/ /'  | sed 's/a/ /' | sed 's/am/ /' | sed 's/pm/ /' | sed 's/AM/ /' | sed 's/PM/ /' )
如果有人有任何建议,我将不胜感激

例如,此输入:

1p
1032AM
419pm
1202a
将产生:

1
10
4
12
尝试:

timeinhour=$(切割-d”“-f2
台阶

1p    -> 1    ->  100 -> 1
10a   -> 10   -> 1000 -> 10
419pm -> 419  ->  419 -> 4
1202a -> 1202 -> 1202 -> 12
  • 删除不属于数字的内容
  • 将1或2位(小时)扩展为4位HHmm
  • 忽略最后两个字符(分钟)

很抱歉。显示的特定行的输入将是一个时间,可能以各种格式写入。示例输入:1p 1032AM 419pm 1202a。输出将只是一天中的小时。示例输入=输出组合:1p=1 1032AM=10 419pm=4 1202a=12@mu太短了:这就是他的意思。很有魅力!谢谢你解释为w嗯。
timeinhour=$(cut -d" " -f2<<<"$line" | sed 's/p/ /;s/a/ /;s/am/ /;s/pm/ /;s/AM/ /;s/PM/ /' | sed 's/\(.*\)../\1/' # Using your example.
sed 's/[^0-9]//g;s/^[0-9]\{1,2\}$/&00/;s/^\(.*\)..$/\1/'
1p    -> 1    ->  100 -> 1
10a   -> 10   -> 1000 -> 10
419pm -> 419  ->  419 -> 4
1202a -> 1202 -> 1202 -> 12