首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >unix cal命令特殊字符

unix cal命令特殊字符
EN

Stack Overflow用户
提问于 2012-11-13 01:30:51
回答 5查看 1.2K关注 0票数 1

当我在unix机器上尝试"cal | tail -6“时,我得到-

代码语言:javascript
复制
             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

但是当我试着"cal | tail -6 | awk '{print $7}'“的时候,我得到了-

代码语言:javascript
复制
10
17
24

3将走向何方?我的需求基本上是所有工作日,即第2、3、4、5和6列。但由于"cal“的奇怪行为,我得到了错误的输出。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-11-13 05:49:51

由于每行中的所有列都是三个字符宽,因此可以使用它来提取您希望的日期。例如,如果您只想要列中的第7天,则可以执行以下操作:

代码语言:javascript
复制
cal | sed 's/^\(.\{18\}\).*$/\1/'

此命令将删除该行中的前18个字符,这些字符是一周的前6天的条目。

要提取特定的一天,例如第四天,您可以这样做:

代码语言:javascript
复制
cal | sed 's/^.\{9\}\(.\{3\}\).*$/\1/'

要删除一周的第一天和最后一天,您可以执行以下操作:

代码语言:javascript
复制
cal | sed -e 's/^.\{3\}//' -e 's/^\(.\{15\}\).\{3\}$/\1/'
票数 0
EN

Stack Overflow用户

发布于 2012-11-13 01:32:53

在第一行中只有3个空格分隔的列。你没有理解awk是如何工作的,cal的工作是完全正确的。就awk而言,第一行中没有第7列,因为它关注的是空格分隔的列,而不是固定宽度的列。

在谷歌上快速搜索一下,就会发现你可以使用

代码语言:javascript
复制
BEGIN  { FIELDWIDTHS = "3 3 3 3 3 3 3" }

在您的awk脚本中。

票数 8
EN

Stack Overflow用户

发布于 2012-11-13 05:56:31

可能是逐行提取就行了。试试ncal。例如:

代码语言:javascript
复制
$ ncal
November 2012
Mo     5 12 19 26
Tu     6 13 20 27
We     7 14 21 28
Th  1  8 15 22 29
Fr  2  9 16 23 30
Sa  3 10 17 24
Su  4 11 18 25
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13348490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档