![通过各种命令管道传输文档片段](https://linux22.com/image/51495/%E9%80%9A%E8%BF%87%E5%90%84%E7%A7%8D%E5%91%BD%E4%BB%A4%E7%AE%A1%E9%81%93%E4%BC%A0%E8%BE%93%E6%96%87%E6%A1%A3%E7%89%87%E6%AE%B5.png)
我想$$$
通过各种命令(可能带有修饰符)发送(可能使用转义序列,例如 )文章的片段。标准输入将被相应的标准输出替换。 (如有必要,使用 sed 删除非常特殊的修饰符应该足够简单。)
我相信我可以用 python 做到这一点...但我想知道是否有一种我不知道的特殊 UNIX 工具或技术可以优雅地完成 90% 的技巧。
更具体地说,请考虑以下文档:
$$$ figlet -f script
Title
$$$
Now it's time to visualize the cosine function:
$$$ gnuplot
set terminal dumb
plot cos(x)
$$$
Finally, a simple directed graph:
$$$ graph-easy
digraph G {
A -> B;
}
$$$
运行我的程序后我会得到:
______ _
(_) |o | |
| _|_ | | _
_ || | |/ |/
(_/ |_/|_/|__/|__/
Now it's time to visualize the cosine function:
1 ++----------***--+---------------****---------------+--***----------++
+ * * + * +* + *cos(x) ****** +
0.8 ++ * * * * * * ++
| * * * * * * |
0.6 ++ * * * * * * ++
| * * * * * * |
0.4 ++ * * * * * * ++
| * * * * * * |
0.2 ++ * * * * * * ++
| * * * * * * |
0 ++ * * * * * * ++
-0.2 ++ * * * * * * ++
| * * * * * * |
-0.4 ++ * * * * * * ++
| * * * * * * |
-0.6 ++ * * * * * * ++
| * * * * * * |
-0.8 *+ * * * * * * +*
+* * + * * + * * + * *+
-1 +***-------------+-----**----------+---------**-----+-------------***+
-10 -5 0 5 10
Finally, a simple directed graph:
+---+
| A |
+---+
|
|
v
+---+
| B |
+---+
任何想法将不胜感激。非常感谢,并欢呼!
答案1
awk '
/^\$\$\$/{
sub(/\$\$\$/, "")
cmd=$0
next
}
{ arr[cmd]=arr[cmd] $0";"}
END{
for (a in arr) {
if (a ~ ".") {
exe=sprintf("%s", a " <<< \042" arr[a] "\042" )
system(exe)
}
else{
print arr[a]
}
}
}' file
输出:
1 ++----------***--+---------------****---------------+--***----------++
+ * * + * +* + *cos(x) ****** +
0.8 ++ * * * * * * ++
| * * * * * * |
0.6 ++ * * * * * * ++
| * * * * * * |
0.4 ++ * * * * * * ++
| * * * * * * |
0.2 ++ * * * * * * ++
0 ++ * * * * * * ++
| * * * * * * |
-0.2 ++ * * * * * * ++
| * * * * * * |
-0.4 ++ * * * * * * ++
| * * * * * * |
-0.6 ++ * * * * * * ++
| * * * * * * |
-0.8 *+ * * * * * * +*
+* * + * * + * * + * *+
-1 +***-------------+-----**----------+---------**-----+-------------***+
-10 -5 0 5 10
;;;Now it's time to visualize the cosine function:;;;Finally, a simple directed graph:;;
+---+
| A |
+---+
|
|
v
+---+
| B |
+---+
______ _
(_) |o | | o
| _|_ | | _
_ || | |/ |/
(_/ |_/|_/|__/|__/o
/
稍微修改一下就可以100%符合你的需求,这没什么大不了的。