Команда Linux sed - PullRequest
       7

Команда Linux sed

0 голосов
/ 19 января 2011

Может кто-нибудь помочь мне понять, что делает следующая команда в Linux.

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

Ответы [ 3 ]

1 голос
/ 19 января 2011

Он выполняет поиск и замену на месте на file.c, ищет

 __attribute__ (__unused__)

в конце строки и заменяет любые вхождения на

# ifndef __cplusplus\n  __attribute__ (__unused__);\nendif

, которыеполучается:

# ifndef __cplusplus
    __attribute__ (__unused__)
# endif

Удвоенные скобки и знаки $ должны «экранировать» эти символы в оболочке.

1 голос
/ 19 января 2011

Как говорит Грег в комментарии, $$ расширится до PID оболочки, что не имеет смысла в контексте. Если это был один знак доллара или его не было, команду можно сократить до:

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

, поскольку & выдвигает то, что было сопоставлено между первой парой разделителей (в этом примере косые черты). Одиночный знак доллара приводит к тому, что сопоставление выполняется только в том случае, если строка находится в конце строки.

1 голос
/ 19 января 2011

Добавляет # ifndef __cplusplus и # endif вокруг __attribute__ ((__unused__)); в file.c

...