sed -i 's,\(#define \s+ V2V_APP_VERSION \s*\)\(.*\),\1'"\"HAHA_TYPE\""',g' ./sc_test.h 增加\s+匹配任意空格为什么不行
时间: 2024-02-04 13:10:01 浏览: 93
在sed命令中,正则表达式中的\s表示匹配任意空白字符,而+表示匹配前面的元素一次或多次。然而,在sed中,默认情况下,正则表达式是基于基本正则表达式(BRE)语法的,它不支持\s和+这样的特殊字符。
如果你想要在sed命令中使用\s+来匹配任意空格,可以考虑使用扩展正则表达式(ERE)语法。在ERE语法中,\s和+可以正常工作。
要在sed命令中使用ERE语法,可以使用-E选项或者--regexp-extended选项。所以你可以尝试以下命令:
sed -E -i 's,\(#define \s+ V2V_APP_VERSION \s*\)\(.*\),\1'"\"HAHA_TYPE\""',g' ./sc_test.h
或者
sed --regexp-extended -i 's,\(#define \s+ V2V_APP_VERSION \s*\)\(.*\),\1'"\"HAHA_TYPE\""',g' ./sc_test.h
这样就可以使用\s+来匹配任意空格了。
相关问题
sed -i 's,\(#define V2V_APP_VERSION \s*\)\(.*\),\1'"\"$(V2V_PRODUCT)\""',g' ./include/v2v_define.h
这是一个使用sed命令来替换文件中指定内容的命令。具体解释如下:
- sed:是一个流编辑器,用于对文本进行处理。
- -i:表示直接修改文件,而不是输出到标准输出。
- 's,\(#define V2V_APP_VERSION \s*\)\(.*\),\1'"\"$(V2V_PRODUCT)\""',g':这是sed的替换命令,其中:
- s:表示替换操作。
- ,:是分隔符,用于分隔不同的部分。
- \(#define V2V_APP_VERSION \s*\):是要匹配的模式,其中:
- \#define V2V_APP_VERSION:表示要匹配的字符串。
- \s*:表示匹配0个或多个空白字符。
- \(.*\):是要替换的内容,其中:
- .*:表示匹配任意字符。
- \1'"\"$(V2V_PRODUCT)\""':是替换后的内容,其中:
- \1:表示引用第一个匹配的模式。
- '"\"$(V2V_PRODUCT)\""':是一个变量,用于替换匹配的内容。
- g:表示全局替换,即替换所有匹配的内容。
最终,该命令会将文件中匹配到的字符串 "#define V2V_APP_VERSION" 后面的内容替换为 $(V2V_PRODUCT) 的值。
请解释sed -i 's,\(#define V2V_APP_VERSION \s*\)\(.*\),\1'"\"v2v.elf_v1.0.15_x86\""',g' ./include/v2v_define.h
这是一个使用sed命令来修改文件中指定内容的命令。具体解释如下:
- `sed`:是一个流编辑器,用于对文本进行处理。
- `-i`:表示直接修改文件,而不是输出到标准输出。
- `'s,\(#define V2V_APP_VERSION \s*\)\(.*\),\1'"\"v2v.elf_v1.0.15_x86\""',g'`:这是sed的替换命令,用于将文件中匹配到的内容替换为指定的内容。
- `s`:表示替换操作。
- `\(#define V2V_APP_VERSION \s*\)`:这是一个正则表达式,用于匹配以`#define V2V_APP_VERSION`开头的行,并且后面可能有空格。
- `\(.*\)`:这是一个正则表达式,用于匹配任意字符。
- `\1`:表示替换后的内容中保留第一个正则表达式的匹配结果。
- `'"\"v2v.elf_v1.0.15_x86\""'`:这是要替换成的内容,即`"v2v.elf_v1.0.15_x86"`。
- `g`:表示全局替换,即一行中可能有多个匹配项都会被替换。
最终,该命令会将文件`./include/v2v_define.h`中匹配到的`#define V2V_APP_VERSION`行后面的内容替换为`"v2v.elf_v1.0.15_x86"`。