前提:我正在修改我的.profile
, 并想在文件开头添加一个大的 ASCII 文本作为由作为注释生成的“配置文件”。figlet
我可以分多个步骤完成,但我试图找到一种方法以尽可能短的步骤完成。
figlet生成大的 ascii 文本,我使用以下命令附加#
到每一行的开头sed
:
figlet -f slant "p r o f i l e" | sed -n 's/^.*/#&/p'
上面的输出:
# ____ _ __
# ____ _____ ____ / __/ (_) / / ___
# / __ \ / ___/ / __ \ / /_ / / / / / _ \
# / /_/ / / / / /_/ / / __/ / / / / / __/
# / .___/ /_/ \____/ /_/ /_/ /_/ \___/
#/_/
现在,我想将此附加到.profile
. 到目前为止,我已经尝试过:sed
,xargs
但是,我还没有达到预期的结果,即在一行命令中完成整个过程。
我绝对可以将其分解为 2 行并解决它,但是没有任何解决方案可以在一行中实现这一点吗?
另一种使用
ex(1)
,vi
/vim
等效于ed
:在文件的第一行之前插入 figlet 管道的结果,并保存它。
一种使用
ed(1)
which 的方法应该适用于GNU
和BSD
变体。printf '%s\n'
就像echo
但更通用。"$( )"
称为命令替换,它捕获命令的输出。请注意,它用双引号括起来是有原因的。0
是缓冲区/文件中的地址或行号,这是第一行,虽然1i
也应该可以工作,但我更喜欢0a
因为1i
空文件会失败a
是表示添加或追加的命令,.""
只是在输出后创建一个空/新行figlet
.
告诉 ed 我们已经完成了编辑。w
意思是写。|
到ed
-s
沉默的旗帜。可以一直使用 GNU sed:
注意
e
第一个命令的修饰符s
,它执行模式空间,我创建的 figlet 命令。由于您已经在使用 sed,您可以通过几个简单的 sed 调用来完成:
最后一次 sed 调用连接 stdin (
-
) 和文件(没有更改)。当然,一次调用 awk 就可以做到:
或者,如果你喜欢
ed
,你可以这样做:嗯,你想要一个单行:
这意味着:
尝试(未经测试)