我有许多 M4 宏文件,我希望从中提取文件路径的单个实例(如果存在)。
在每个文件中都有一行
define(`XSETROOT', `some_command with parameters SOME_DIR/subdir1/subdir2/filename')
或分布在两条线上
define(`XSETROOT', dnl
`some_command with parameters SOME_DIR/subdir1/subdir2/filename')
或根本没有条目。
所以我希望找到开始的行
define(\`XSETROOT',
然后从同一行或下一行提取以“空格”和“单引号”为界的字符串,即
SOME_DIR/subdir/subdir/filename
这可以在不诉诸多个 sed 调用的情况下完成吗?
附加信息(下面评论字段中的格式似乎不起作用)-
在最简单的情况下,当一切都在同一行时,引号的问题可以通过适当的引用/取消引用来克服,并且这个表达式有效
sed -ne 's|define(`XSETROOT'\'',.*`.* \(.*\)'\''.*|\1|p' file.m4
更多信息 -
感谢 MvG 的响应展示了如何进行多行处理,当数据分成两行时,这个表达式有效
sed -ne '/define(`XSETROOT/{n;s|`.* \([^'\'']*\)'\'').*|\1|p}' file.m4
但是问题仍然存在,是否有可能构造一个表达式来处理一两行上的数据,或者我是否必须尝试一个来查看是否有返回的字符串,如果没有,则尝试另一个来查看如果返回一个字符串?