【发布时间】:2011-05-15 03:11:58
【问题描述】:
我正在使用 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/ /' )
如您所见,我只是从可能以各种方式格式化的时间条目中删除任何尾随的 am 或 pm,只留下数字。
所以我希望这条线只是吐出一天中的小时(timeinhour),即“1000AM”=“10”,“10a”和“10am”也是如此。
我遇到的问题是时间条目的长度不同。如果我告诉 sed 或 cut 删除最后两个字符,“1000”将正确输出我需要的小时:“10”,但在已经是“10”的字符上使用它显然会导致空白输出。
我一直在尝试这样的一行
sed 's/\(.*\)../\1/'
如果有人有任何建议,我将不胜感激。
例如这个输入:
1p
1032AM
419pm
1202a
会产生:
1
10
4
12
【问题讨论】:
-
很抱歉。显示的特定行的输入将是时间,可能以各种格式编写。示例输入:1p 1032AM 419pm 1202a。输出将只是一天中的一个小时。输入=输出组合示例:1p=1 1032AM=10 419pm=4 1202a=12
-
@mu 太短:这就是他的意思。