问题陈述是
如果今天的日期是个位数,那么用单个*替换该日期 如果今天的日期是两位数,则将其替换为double *
我的代码适用于单个数字日期。
但我的sed代码无法用双**
替换双位数。
这是我的代码:
#!/bin/sh
set `date`
if [ $3 -le 9 ]
then
n=`cal | tail -n +3 | grep -n "$3"| cut -d ":" -f1 | head -n 1`
n=`expr $n + 2`
cal | sed "$n s/$3/*/"
else
cal | sed "s/$3/**/"
fi
这行中的错误是什么
cal | sed "s/$3/**/"
假设$3
包含值19
。
这是cal |的输出cat -vte
abhijith@abhijith-compaq-420:~/Desktop$ cal | cat -vte
December 2013 $
Su Mo Tu We Th Fr Sa $
1 2 3 4 5 6 7 $
8 9 10 _^H1_^H1 12 13 14 $
15 16 17 18 19 20 21 $
22 23 24 25 26 27 28 $
29 30 31 $
$
答案 0 :(得分:2)
cal | sed "s/$3/**/"
对我来说很好。但我建议用这种方式重写你的脚本:
#!/bin/sh
day=`date +%d`
case $day in
?) cal | sed "s/ $day/ */" ;;
??) cal | sed "s/$day/**/" ;;
esac
<强>更新强>
既然你说它不适合你,让我们回到基础。这个脚本的输出是什么:
#!/bin/sh
day=9; cal | sed "s/ $day/ */"
day=19; cal | sed "s/$day/**/"
我明白了:
December 2013
S M Tu W Th F S
1 2 3 4 5 6 7
8 * 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
December 2013
S M Tu W Th F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 ** 20 21
22 23 24 25 26 27 28
29 30 31