如何使用sed替换此行
char * path_list_[1] = { "/some/random/path" };
这一行
char * path_list_[2] = { "lib/foo", "lib/bar" };
在名为source.c的文件中
注意:
*路径非常随机
*您的解决方案只应在source.c中更改此行
*我只对sed oneliner感兴趣。
您可以使用此Python正则表达式作为起点:
text = re.sub('static const char \* path_list_\[1\] = \{ "[^"]*" \};',
'static const char * path_list_[2] = { "lib/sun", "lib/matlab" };', text)
答案 0 :(得分:1)
试试这个:
sed -e 's/=\s*{\s*"[^"]*"\s*};/= { "lib\/foo", "lib\/bar"};/' source.c | sed -e 's/path_list_\[1\]/path_list_[2]/'
答案 1 :(得分:1)
首先,找到一个不会出现在你的路径或替代品中的角色(通常#
是一个很好的初步近似值,但是......)。
然后:
sed 's#_.1. = {[^}]*}#_[2] = { "your/first", "and/your/second" }#'
请注意,s
之后的第一个字符是您的分隔符,不需要它/
,它只是传统上“我不需要的字符”。
编辑:好像sed不理解+
为“一个或多个”。请改用*
(零或更多)。
答案 2 :(得分:1)
$ cat file
aaaa
char * path_list_[1] = { "/some/random/path" };
zzzz
$ sed '/char/s@1\]@2]@;s@{.*}.*$@{\"lib\/foo", "lib\/bar"}@' file
aaaa
char * path_list_[2] = {"lib/foo", "lib/bar"}
zzzz
答案 3 :(得分:1)
假设您要替换名为 path_list _ 的字符串变量,并且只替换那些字符串变量。
sed '/path_list_/s@1\]@2]@; /path_list_.*\[.*{/s@\".*\"@\"lib\/foo", "lib\/bar"@'
这将仅替换以下输入中的前两行。
char * path_list_[1] = { "/some/random/path" };
char * path_list_[1] = {"/some/random/path"};
char * not_replaced[1] = { "/some/random/path" };
char * not_replaced[1] = {"/some/random/path"};
char * path_list_ = {"/some/random/path"};
path_list_[1] = "/some/random/path";
答案 4 :(得分:1)
基于您给出的Python正则表达式:
echo 'char * path_list_[1] = { "/some/random/path" };' | \
sed -E -e 's/char \* path_list_\[1\] = \{ "[^"]*" \};/char * path_list_[2] = { "lib\/sun", "lib\/matlab" };/'
输出
char * path_list_[2] = { "lib/sun", "lib/matlab" };
或者
echo 'static const char * path_list_[1] = { "/some/random/path" };' | \
sed -E -e 's/static const char \* path_list_\[1\] = \{ "[^"]*" \};/static const char * path_list_[2] = { "lib\/sun", "lib\/matlab" };/'
输出
static const char * path_list_[2] = { "lib/sun", "lib/matlab" };
(这是使用Mac OS X中包含的FreeBSD-type sed完成的。)
答案 5 :(得分:0)
sed -e 's@char \* path_list_\[1\] = { "[^"]*" };@char * path_list_[2] = { "lib/foo", "lib/bar" };@g'
答案 6 :(得分:0)
sed -re 's/^(char \* path_list_\[)1(\] = \{ ")[^"]*(" \})\W*$/\12\2\/lib\/foo", "\/lib\/bar\3/' source.c