sed を使用した非常に複雑な式の管理

sed を使用した非常に複雑な式の管理

この行を置き換えるスクリプトを作成しようとしています。

 [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "

次の行を使用してください。

# [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "

これにより、新しい行が追加されます。

[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \D{%T} \W]\\$ "

ファイルとして/etc/bashrc。デフォルトでは、スクリプトは以前の設定に注釈を付け、プロンプトのユーザー名の横にタイムスタンプ(新しい設定)を追加したいと思います。私は次のように最初の部分を実行しようとしています。

pattern=' [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "'
sudo sed 's/${pattern}/#${pattern}/' < /etc/bashrc 

しかし、うまくいきません。文字列の特殊文字が原因であるようです。しかし、どの文字をエスケープする必要があるのか​​わかりません。最後の部分は次のようになります。

sed -i '  [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \D{%T} \W]\\$ "' /etc/bashrc

いくつかのガイドが提供されます。

ありがとう

ベストアンサー1

  1. スクリプトの一重引用符は拡張をsed防ぎます${pattern}。二重引用符を使用する必要があります(ただし、これは上記の特殊文字の問題を引き起こします)。
  2. sed指定された行のアドレス指定を十分に使用して識別し、次のコメントを挿入します。/^ *\[ *"$PS1 =/s/^/#/
  3. aコマンドを使用してsed与えられた行を追加します。

あなたの場合は、行に何かを追加したいので

sed 's/\( *\[ "$PS1" = "..s-..v...$ " \] && PS1="\[[email protected] \)\(.W]..$ "\)/#\1\2\
\1\\D{%T} \2/' /etc/bashrc 

おすすめ記事