SED;さまざまな特殊文字を含む一致する行の前に#を追加します。

SED;さまざまな特殊文字を含む一致する行の前に#を追加します。

さて、ここと他の場所の多くの投稿を見てみましたが、次の行の前に#が見つかりません。

[ -n "$ID" -a "$ID" -le 200 ] && return

次のようないくつかの解決策を試しました。

sed -r "s/[ -n '$ID' -a '$ID' -le 200 ] \&\& return/#[ -n '$ID' -a '$ID' -le 200 ] \&\& return/g"

そして

sed 's/[ -n "$ID" -a "$ID" -le 200 ]/#&/'

ここと他の場所の投稿に基づいていくつかの異なるアイデアがありますが、まだ結果はありません。私はこの結果を得ます:

[ -n "$ID" -a "$ID" -le 200 #[ -n '0' -a '0' -le 200 ] ] && return] && return return

そして

#if [ -n "$BASH_VERSION" -o -n "$KSH_VERSION" -o -n "$ZSH_VERSION" ]; then
#  [ -x /usr/bin/id ] || return
#  ID=`/usr/bin/id -u`
#  [ -n "$ID" -a "$ID" -le 200 ] && return
#  # for bash and zsh, only if no alias is already set
#  alias vi >/dev/null 2>&1 || alias vi=vim
#fi

おそらく、誰かが上記の特定の行の#(タグ)を取得する方法を説明できます。たぶんそれは単純なものかもしれませんが、最善の推測は私が正しく脱出していないということです。

上記のように、さまざまな投稿を確認しましたが、まだ達成できないようです...

答え1

角かっこをエスケープする必要があります。

sed 's/^\[ -n "$ID" -a "$ID" -le 200 \] && return$/#&/'

関連情報