XMLファイルがありますが、ファイルの値を変更したいと思います。
param name=swam_license_ports_overdraft_thresh
99
param name="strike_license_ports_overdraft_thresh"
99
私が望む結果は、param name = swam_license_ports_overdraft_threshの下の値99を90に変更し、param name = "strike_license_ports_overdraft_thresh"の下の他の値99を変更しないことです。
答え1
私が正しく理解した場合は、最初の一致のみを削除したいので、次のようにすることができます。
sed -e '/99/{s//XXX/;:a;n;ba}' file
GNUを使用すると、sed
次のことができます。
sed -e '0,/99/s//XXX/' file
答え2
最初の一致を削除する(行を保持)
awk '!x&&/99/{x++;$0=y}1' file
最初の一致を削除する(行を保持しない)
awk '!x&&/99/{x++;next}1' file
最初の一致を置き換える
awk '!x&&/99/{x++;$0="98"}1' file
答え3
sed -n 'h;/match/n;G;P;//D'
最初の項目のみが削除されます。マッチすべての入力ファイルで。それ
h
各行は既存のスペースを覆います。次の入力でパターンスペースを上書きするマッチワイヤー
G
etsはパターンスペースに追加されたスペースを予約します。P
\n
パターンスペースで最初に表示されるewline文字まで印刷します。D
同じ要素マッチワイヤー
しかし問題はこのプロセスですすべて最初の発生後の行マッチまたなるマッチ次の行に達する前に。したがって、常に一致し、印刷されません。
sed '/match/x;//x'
この値は、次の最初の項目を置き換えます。マッチ空行を含むファイル。
存在するマッチ
sed
eラインは既存の空間とパターン空間をx
変えます。h
新しいパターン空間なら(古いパターン空間)返品マッチそれは
x
また変わります。それ以外の場合は、最初の発生をそのまま維持します。マッチ新旧
h
スペースと印刷余白パターン空間に