如何使用 tr、sed 和 cal 在单独的行上显示一个月中的每一天

如何使用 tr、sed 和 cal 在单独的行上显示一个月中的每一天

如何使用命令、calsedtr管道来显示一个月的数字天数(例如,1、2、3 等),并且每一天都在单独的行上

我试过了:

cal 12 2015| sed '3,7p' | tr -cs "[:alpha:]" "[\n*]" 

并输出:

December
S
M
Tu
W
Th
F
S

答案1

你已经很接近了。

  1. 在有选择地打印行之前,您需要抑制sed的输出:

    $ cal 12 2015 | sed -n '3,7p'                             
           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       
    

    sed可能没有-n。在这种情况下,请使用d删除除所需行之外的所有行。

  2. 您的tr命令将替换除字母表之外的所有内容 - 其中包括数字。只需替换空格即可:

    $ cal 12 2015 | sed -n '3,7p' | tr -s ' ' '\n'                
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    

答案2

sed命令中的行范围@穆鲁吸引了我的注意。您可以较少依赖以下格式来完成此操作cal

cal 12 2015 | sed '/[[:alpha:]]/d' | tr ' ' '\n' |sed -e '/^$/d'

POSIX 没有指定格式cal,因此标头的长度可能因实现而异。

相关内容