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

问题描述:

我正在使用sed和剪切,这将需要时间输入以各种方式,并以特定格式输出它们的bash脚本。下面是一个例子行:Bash脚本:使用sed和剪切输出特定格式

timeinhour=$(cut -d" " -f2<<<"$line" | sed 's/p/ /' | sed 's/a/ /' | sed 's/am/ /' | sed 's/pm/ /' | sed 's/AM/ /' | sed 's/PM/ /') 

正如你看到的,我只是去除可能以各种方式进行格式化,只留下数字的时间进入任何尾随上午或下午。

所以我想这条线只是吐出一天的时间(timeinhour),即“10a”和“10am”的“1000AM”=“10”。

我遇到的问题是时间条目变化的长度。如果我告诉sed或剪切以删除最后两个字符,“1000”将正确输出我需要的小时数:“10”,但在已经为“10”的小时使用它显然会导致空白输出。

我一直在用一条线试验这样

sed 's/\(.*\)../\1/' 

如果任何人有任何建议,我将不胜感激。

例如,该输入:

1p 
1032AM 
419pm 
1202a 

将产生:

1 
10 
4 
12 
+0

对此深感抱歉。显示的特定行的输入将是一段时间,可能以各种格式书写。示例输入:1p 1032AM 419pm 1202a。输出将只是一天中的一小时。示例输入=输出组合:1p = 1 1032AM = 10 419pm = 4 1202a = 12 – user686566 2011-05-14 17:24:21

+0

@mu太短:这就是他的意思。 – Lucius 2011-05-14 17:45:51

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 
  • 删除什么不是数
  • 扩大1或2位数字(小时)到4位HHMM
  • 忽略最后两个本地字符(分钟)
+0

工程就像一个魅力!感谢您的解释。 – user686566 2011-05-14 18:03:25

尝试:

timeinhour=$(cut -d" " -f2<<<"$line" | sed 's/p/ /;s/a/ /;s/am/ /;s/pm/ /;s/AM/ /;s/PM/ /' | sed 's/\(.*\)../\1/' # Using your example.