假设我正在编写一个.bashrc
文件,以便在登录终端中为我提供一些有用的信息,并且我告诉它运行 cal 命令(一个不错的命令)。我将如何将生成的日历向右移动以匹配.bashrc
“欢迎消息”其余部分的格式?
答案1
cal | sed 's/^/ /'
解释
cal |
:将 cal 的输出通过管道传输到...sed 's/^/ /'
sed,它将查找行的开头^
,并用空格替换。您可以在此处更改空格数以匹配所需的格式。
编辑
要保留当天的突出显示cal
,您需要告诉它向管道输出“颜色”(突出显示)。从man cal
--color [when]
Colorize output. The when can be never, auto, or always. Never will turn off coloriz‐
ing in all situations. Auto is default, and it will make colorizing to be in use if
output is done to terminal. Always will allow colors to be outputed when cal outputs
to pipe, or is called from a script.
注意手册中似乎有一个拼写错误;我需要一个=
才能让它工作。因此,最终的命令是
cal --color=always | sed 's/^/ /'
答案2
cal | nl -bn
...会起作用,因为nl
总是缩进它没有编号的输入行,以等于它添加到的缩进量。默认情况下,nl
不对输入的-h
开头或-f
结尾部分进行编号,而仅对-b
正文行进行编号。如果你还告诉它n
不要对正文行进行编号-b
,它根本不会对任何内容进行编号,并且只会在每个输入行中插入缩进。
使用-w
idth 和-s
eparator 开关调整缩进的大小。
cal; cal | nl -bn
December 2015
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
December 2015
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
还有:
cal | pr -to[num]
...在哪里[num]
是要在每行行首插入的空格数。pr
通常每行打印 66 行页,但-t
告诉它省略页眉/页脚插入,只将输入打印到输出。然后使用 ffset 边距开关-o
插入所需数量的空格[num]
在每个输出行的开头:
cal; cal | pr -to10
December 2015
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
December 2015
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
答案3
和paste
:
cal | paste /dev/null -
paste
将文件行粘贴在一起,中间带有制表符。在这里,我们将空文件 ( /dev/null
) 与paste
stdin ( ) 粘贴在一起,这是通过管道传递-
的输出。cal
答案4
这是使用的示例ex
:
ex +"%norm 20I " +%p -scq! <(cal)
更改20
为所需空格数。使用"%norm 20I "
比通过替换重复许多空格 - 更有效"%s/^/ /"
。