<host></host>
ファイルの3行目にあります。に置き換えたい<host>my_dB</host>
。でこれを行う方法sed
。4 行目、5 行目、6 行目もこのような置換を行いたいと考えています。
<host></host>
<host>my_dB</host>
このような:
$ sed '3,6 s/<host>/<host>my_dB/' file
デモ:
$ cat file
1: <host></host>
2: <host></host>
3: <host></host>
4: <host></host>
5: <host></host>
6: <host></host>
7: <host></host>
$ sed '3,6 s/<host>/<host>my_dB/' file
1: <host></host>
2: <host></host>
3: <host>my_dB</host>
4: <host>my_dB</host>
5: <host>my_dB</host>
6: <host>my_dB</host>
7:
変更をファイルに保存するには、-i
オプションを使用します
$ sed -i '3,6 s/<host>/<host>my_bd/' file
ただし、実際には XML パーサーを使用する必要があります。で XML を解析することregexp
は、本当に悪い考えです。
<host></host>
ファイル内のすべてのインスタンスをwithに置き換えるには<host>my_dB</host>
、次を実行します。
sed 's|<host></host>|<host>my_dB</host>|g' file
それぞれ、次のような方法で実行できます。
sed -i "s/<host><\/host>/<host>my_db<\/host>/" foo.txt
これ-i
は、ファイルをその場で上書きすることを意味します。そのフラグを削除して、変更を stdout に書き込みます。
これが通常のタスクでファイルの詳細を入力する場合は、簡単にするためにファイルにアンカーを追加することを検討してください。例えば:
<host>DB_HOST</host>
次に、sedは次のようにする必要があります。
sed -i 's/DB_HOST/my_db/'
これを試して:
sed -r '3,5s#(<host>)(</host>)#\1my_dB\2#' file