Linuxで次のコマンドが何をするのか理解してくれる人はいらっしゃいますか?Linuxのsedコマンド
sed -i file.c -e "s/ __attribute__ ((__unused__))$$/# ifndef __cplusplus\n __attribute__ ((__unused__));\n# endif/"
Linuxで次のコマンドが何をするのか理解してくれる人はいらっしゃいますか?Linuxのsedコマンド
sed -i file.c -e "s/ __attribute__ ((__unused__))$$/# ifndef __cplusplus\n __attribute__ ((__unused__));\n# endif/"
に__attribute__ ((__unused__));
周り# ifndef __cplusplus
と# endif
を追加任意の発生箇所を置き換えてください。
たということになります:倍増ブラケットと$記号はシェルでそれらの文字を「エスケープ」になっている
# ifndef __cplusplus
__attribute__ (__unused__)
# endif
。
それは、それは、行の末尾に
__attribute__ (__unused__)
を探して、インプレース検索と置換file.c
上をやっているFILE.C
Gregがコメントで言うように、$$
は、コンテキストで意味をなさないシェルのPIDに展開されます。 &
は、区切り文字(この例ではスラッシュ)の最初のペアの間にマッチしたものを前方にもたらしますので、
sed -i file.c -e "s/ __attribute__ ((__unused__))$/# ifndef __cplusplus\n&;\n# endif/"
:それは、単一のドル記号だった、または存在しなかった場合、コマンドはに短縮することができます。 1つのドル記号は、文字列が行末にある場合にのみ一致させます。
ダブルブラケットの構文は、gccの '__attribute__'指定子の一部であると思います。 '$$'は現在のpidを返すシェル変数であるため、何かをエスケープする '$$'についてはわかりません。 –
真ですが、$$は二重引用符で囲まれた文字列の中にあるため、展開されます。 –
答えを訂正してください。 2倍の文字は「エスケープ」を行いません。 –