Linux-sed命令

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在

谁能帮助我理解以下命令在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
在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,但$$在双引号字符串中,因此它将被展开。请更正您的答案。双重字符不进行任何“转义”。