首次更换后暂停

时间:2014-02-12 01:20:15

标签: linux bash sed

我正在编写一个脚本,我需要在一行中搜索几个月,例如01,02 ...,12并将其替换为缩写。但是,虽然我需要搜索所有月份,但我只需要替换我找到的月份编号的第一个实例。例如,如果我们有一行如下所示:

05 06 07

我需要sed执行以下操作:

2007年5月6日

我正在使用的当前命令产生:

5月6月7月

哪个不可取。这是我正在使用的:

 date=$(echo $line |cut -d , -f 1 | sed 's/-/ /g;s/:00//;s/:/ /g;s/01/Jan/;s/02/Feb/;s/03/Mar/;s/04/April/;s/05/May/;s/06/Jun/;s/07/Jul/;s/08/Aug/;s/09/Sep/;s/10/Oct/;s/11/Nov/;s/12/Dec/')

感谢先进的帮助

3 个答案:

答案 0 :(得分:1)

尝试类似

的内容
> echo $line
foo foo05 06 07 foo 02
> [[ $line =~ [0-9]{2}' '[0-9]{2}' '[0-9]{2} ]] && date -d $(echo "${BASH_REMATCH[0]}" | tr ' ' '/') '+%b %d %y' 
May 06 07

答案 1 :(得分:1)

与gnu日期

echo "05 06 07" | while read -r mon rest
do
  mon=$(date -d "2014-$mon-01" +%b)
  echo $mon $rest
done 

答案 2 :(得分:0)

这很尴尬,但似乎有效:

... sed 's/-/ /g;s/:00//;s/:/ /g
s/01/Jan/
t
s/02/Feb/
t
s/03/Mar/
t
s/04/April/
t
s/05/May/
t
s/06/Jun/
t
s/07/Jul/
t
s/08/Aug/
t
s/09/Sep/
t
s/10/Oct/
t
s/11/Nov/
t
s/12/Dec/'