shell脚本显示当前日期的日历,当前日期替换为*

时间:2015-07-05 17:20:41

标签: shell unix

我希望结果如下:

May 2014
Su Mo Tu We Th Fr Sa
             1  2  3
4   5  *  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

我可以使用date |cut -d' ' -f4

提取日期

但是当我执行命令cal|sed "s/date|cut -d' ' -f4/*/"

日历输出没有变化。

有人可以告诉我哪里出错了吗?

感谢。

2 个答案:

答案 0 :(得分:2)

data|cut -d' ' -f4作为单个脚本运行并使用选区周围的字边界选择该特定日期。

cal|sed -r "s/\b$(date|cut -d' ' -f4)\b/*/"

此处将$(date|cut -d' ' -f4)作为脚本运行,输出将用于sed选择:

cal|sed -r "s/\bOUTPUT\b/*/"

使用\b非常重要,因为它表示为单词边界。另外,对于当前日期(比如5),5的所有出现都将替换为*

输出:

     July 2015        
Su Mo Tu We Th Fr Sa  
          1  2  3  4  
 *  6  7  8  9 10 11  
12 13 14 15 16 17 18  
19 20 21 22 23 24 25  
26 27 28 29 30 31

答案 1 :(得分:0)

$(...)放在date|cut -d' ' -f4部分周围,以便将其作为脚本执行:

cal|sed "s/$(date|cut -d ' ' -f4)/*/"

更新: 重新阅读您的问题我不完全确定您是否要将当前日期替换为*或将*添加到当前日期。对于后者,您可以使用&字符来使用您在替换中寻找的模式(因此您可以添加*而不是仅替换):

cal|sed "s/$(date|cut -d ' ' -f4)/*/"

您可以按照this link找到有关sed的大量信息。