如何在md文件中执行shell脚本

hsvhsicv  于 2023-02-19  发布在  Shell
关注(0)|答案(1)|浏览(258)

我们有一个MarkDown文件,其中存储了多个组件的版本。

component1=1.2
components2=2.3
component3=`cat file1 | grep 'App_Version' | grep -P '(?<==).*' && rm -rf file1`

这里component3的版本是动态的,所以我们执行命令来获取版本。
需要帮助以正确的方式完成这一点。

gcuhipw9

gcuhipw91#

Markdown不是一种脚本语言,所以你可能需要某种形式的预处理,例如GNU m4(但是任何具有类似功能的预处理器都可以完成这项工作):

$ cat sample.m4
m4_changequote(`"""', `"""')m4_dnl
component1=1.2
components2=2.3
component3=m4_esyscmd("""grep -Po '(?<=App_Version=).*' file1 && rm -f file1""")m4_dnl
component4=foo

$ cat file1
App_Version=4.0.2

$ m4 -P sample.m4 > sample.md

$ cat sample.md
component1=1.2
components2=2.3
component3=4.0.2
component4=foo

$ ls file1
ls: cannot access 'file1': No such file or directory

说明:

  • m4-P选项修改所有内置宏的名字,使它们都以m4_前缀开头。这不是绝对需要的,但它使源代码更容易阅读。
  • sample.m4文件是您的源文件,即您要编辑的文件。

m4 -P sample.m4 > sample.md
命令预处理源文件以生成标记文件。

  • sample.m4开头的m4_changequote宏更改了m4用于文本字符串的引号。使用您想要的任何左引号和右引号(在我们的示例中为"""),只要它不在您的markdown文本中使用。
  • m4_dnl是取消该行其余部分(包括换行符)的宏。
  • m4_esyscmd("""cmd""")替换cmd shell脚本的输出。

注意:我假设您需要grep -Po '(?<=App_Version=).*' file1,而不是cat file1 | grep 'App_Version' | grep -P '(?<==).*',后者看起来像是同时使用多个反模式。

相关问题