Linux-sed命令
谁能帮助我理解以下命令在Linux中的作用Linux-sed命令,sed,Sed,谁能帮助我理解以下命令在Linux中的作用 sed -i file.c -e "s/ __attribute__ ((__unused__))$$/# ifndef __cplusplus\n __attribute__ ((__unused__));\n# endif/" 它在uu属性uu((uu unused_u))周围添加了f cplusplus和#endif在file.c中,它在\uuu属性((\uu未使用的\uu))周围添加\ifndef\uu cplusplus和\endif在
sed -i file.c -e "s/ __attribute__ ((__unused__))$$/# ifndef __cplusplus\n __attribute__ ((__unused__));\n# endif/"
它在
uu属性uu((uu unused_u))周围添加了f cplusplus
和#endif
在file.c中,它在\uuu属性((\uu未使用的\uu))周围添加\ifndef\uu cplusplus
和\endif
在file.c中,它在file.c
上执行就地搜索和替换,查找
__attribute__ (__unused__)
在一行的末尾,并将所有发生的事件替换为
# ifndef __cplusplus\n __attribute__ (__unused__);\nendif
其结果是:
# ifndef __cplusplus
__attribute__ (__unused__)
# endif
双括号和$符号用于“转义”shell中的字符。它在
file.c
上进行就地搜索和替换,查找
__attribute__ (__unused__)
在一行的末尾,并将所有发生的事件替换为
# ifndef __cplusplus\n __attribute__ (__unused__);\nendif
其结果是:
# ifndef __cplusplus
__attribute__ (__unused__)
# endif
双括号和$符号用于“转义”shell中的那些字符。正如Greg在评论中所说,
$
将扩展到shell的PID,在上下文中没有意义。如果它是一个美元符号,或者不存在,则该命令可以缩短为:
sed -i file.c -e "s/ __attribute__ ((__unused__))$/# ifndef __cplusplus\n&;\n# endif/"
因为
&
提出了第一对分隔符(本例中为斜线)之间的匹配内容。单美元符号导致仅当字符串位于行的末尾时才进行匹配。正如Greg在评论中所说,$
将扩展到shell的PID,这在上下文中没有意义。如果它是一个美元符号,或者不存在,则该命令可以缩短为:
sed -i file.c -e "s/ __attribute__ ((__unused__))$/# ifndef __cplusplus\n&;\n# endif/"
因为
&
提出了第一对分隔符(本例中为斜线)之间的匹配内容。单美元符号导致仅当字符串位于行的末尾时才进行匹配。我想您会发现双括号语法是gcc中\uuuu属性\uuuu
说明符的一部分。我不确定$$
是否会转义任何内容,因为$$
是一个shell变量,返回当前pid.True,但$$在双引号字符串中,因此它将被展开。请更正您的答案。双精度字符不会进行任何“转义”。我想您会发现双括号语法是gcc中\uuuu属性\uuu
说明符的一部分。我不确定$$
是否会转义任何内容,因为$$
是一个shell变量,返回当前pid.True,但$$在双引号字符串中,因此它将被展开。请更正您的答案。双重字符不进行任何“转义”。