Linux sed命令

时间:2011-01-19 02:21:15

标签: sed

任何人都可以帮助我理解Linux中的以下命令。

sed -i file.c -e "s/  __attribute__ ((__unused__))$$/# ifndef __cplusplus\n  __attribute__ ((__unused__));\n# endif/"

3 个答案:

答案 0 :(得分:1)

它在file.c

中的# ifndef __cplusplus附近添加了# endif__attribute__ ((__unused__));

答案 1 :(得分:1)

正在file.c进行内部搜索和替换,寻找

 __attribute__ (__unused__)

在一行的末尾,并用

替换任何出现的情况
# ifndef __cplusplus\n  __attribute__ (__unused__);\nendif

适用于:

# ifndef __cplusplus
    __attribute__ (__unused__)
# endif

加倍括号和$符号将“逃避”shell中的那些字符。

答案 2 :(得分:1)

正如Greg在评论中所说,$$将扩展到shell的PID,这在上下文中没有意义。如果它是单个美元符号,或者不存在,则该命令可以缩短为:

sed -i file.c -e "s/  __attribute__ ((__unused__))$/# ifndef __cplusplus\n&;\n# endif/"

因为&提出了第一对分隔符(本例中的斜杠)之间匹配的内容。单个美元符号仅在字符串位于该行的末尾时才会进行匹配。