- 我想递归地用
"foo/bar.h"
替换<foo/bar.h>
的示例(用"
替换<
,用"
替换>
)。 - 匹配序列可能有不同的深度,但根总是从
<foo
开始。例如,<foo/baz/bar.h>
也应该被替换。
这就是我目前所拥有的,但是它缺少在输出中使用中间匹配任何部分.*
的能力(导致"foo/.*"
明显不正确)
grep -rl "\<foo\/.*>" ./ | xargs sed -i 's/<foo\/.*>/\"foo\/.*\"/g'
我接近了,但是需要一种方法来扩展输出中的.*
,使其实际上是输入中发现的匹配,而不是文字字符串.*
示例
./dir1/a.cc
包含以下行:#include <foo/bar.h>
,更换后应包含#include "foo/bar.h"
./dir1/dir2/b.h
包含以下行:#include <foo/bar/baz.h>
,更换后应包含#include "foo/bar/baz.h"
1条答案
按热度按时间ss2ws0br1#
引用this的帖子:
grep -rl "\<foo\/.*>" ./ | xargs sed -i -E 's/<foo\/(.*)>/\"foo\/\1\"/g'