我们有一个MarkDown文件,其中存储了多个组件的版本。
component1=1.2 components2=2.3 component3=`cat file1 | grep 'App_Version' | grep -P '(?<==).*' && rm -rf file1`
这里component3的版本是动态的,所以我们执行命令来获取版本。需要帮助以正确的方式完成这一点。
gcuhipw91#
Markdown不是一种脚本语言,所以你可能需要某种形式的预处理,例如GNU m4(但是任何具有类似功能的预处理器都可以完成这项工作):
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
说明:
-P
m4_
sample.m4
m4 -P sample.m4 > sample.md命令预处理源文件以生成标记文件。
m4 -P sample.m4 > sample.md
m4_changequote
"""
m4_dnl
m4_esyscmd("""cmd""")
cmd
注意:我假设您需要grep -Po '(?<=App_Version=).*' file1,而不是cat file1 | grep 'App_Version' | grep -P '(?<==).*',后者看起来像是同时使用多个反模式。
grep -Po '(?<=App_Version=).*' file1
cat file1 | grep 'App_Version' | grep -P '(?<==).*'
1条答案
按热度按时间gcuhipw91#
Markdown不是一种脚本语言,所以你可能需要某种形式的预处理,例如GNU
m4
(但是任何具有类似功能的预处理器都可以完成这项工作):说明:
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 '(?<==).*'
,后者看起来像是同时使用多个反模式。