【发布时间】:2012-08-29 13:13:08
【问题描述】:
我有许多 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
但问题仍然存在,是否有可能构造一个表达式来处理一两行上的数据,或者我是否必须尝试其中一个来查看是否有返回的字符串,如果没有则尝试另一个看看它是否返回一个字符串?
【问题讨论】:
-
我知道该怎么做,但是处理所有这些不同的报价简直是要了我的命。由于这个原因,我无法让我的命令工作:(
-
在所有内容都在同一行的情况下,这可以解决单引号问题
sed -ne 's|define(所以我需要帮助的部分是如果可能的话,如何在同一行或下一行处理一次调用XSETROOT'\'',.*.* (.*) '\''.*|>\1
标签: sed