sedが私が要求したよりも多くのことをするのはなぜですか?

sedが私が要求したよりも多くのことをするのはなぜですか?

sed -i -e "s/..\///" -e "s/type_properties\///" testfile次のファイルに適用するとき:

#include "../../../../include/concepts/type_properties/operations/has_or_op_v.hpp"

int main() {
    // Test has_not_op_v.
}

次のように出力されます。

#include "../../../include/concepts/operations/has_or_op_v.hpp"

int main() {
  / Test has_not_op_v.
}

私はsedだけを削除し../て削除したいのですtype_properties/が、これは私の意見も壊れます。

ベストアンサー1

役割.メタ文字。つまり特別な意味があるという意味だ。.「単一文字または文字と一致」を意味します。リテラル.文字のみを一致させようとします。

.に変更すると、\.正しい出力が得られます。

例:

sed -i -e "s/..\///" -e "s/type_properties\///" testfile

になる:

sed -i -e "s/\.\.\///" -e "s/type_properties\///" testfile

おすすめ記事