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
答
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.
对此深感抱歉。显示的特定行的输入将是一段时间,可能以各种格式书写。示例输入:1p 1032AM 419pm 1202a。输出将只是一天中的一小时。示例输入=输出组合:1p = 1 1032AM = 10 419pm = 4 1202a = 12 – user686566 2011-05-14 17:24:21
@mu太短:这就是他的意思。 – Lucius 2011-05-14 17:45:51