0

ここでの私の最初の投稿と初心者レベル。この問題を sed (またはその他の手段) で解決する方法はありますか? 新しく作成されたファイルを毎日操作し、いくつかの IP とポートのオカレンスを置き換えたいと考えています。

1) 最初に出現した "5027,5028" を A3 に、2 番目を A4 に置き換えたい。2) 最初に出現した "5026" を A1 に、2 番目を A2 に置き換えたい。

PS。例を単純化しようとして、前の行に version="y" または version="x" を残しました。これは、出現を互いに区別するのに役立つ可能性があります。(最初の x と y のバージョンのペアはプライマリ接続で、残りの 2 つはセカンダリ接続です)。

入力ファイル:

version="x"
commaSeparatedList="5027,5028"`
version="y"
commaSeparatedList="5026"
version="x"
commaSeparatedList="5027,5028"
version="y"
commaSeparatedList="5026"

編集したファイル:

version="1.4.1-12"
commaSeparatedList="A3"
version="1.3.0"
commaSeparatedList="A1"
version="1.4.1-12"
commaSeparatedList="A4"
version="1.3.0"
commaSeparatedList="A2"

申し訳ありませんが、数分間、編集の恐怖がありました。今は理解しやすいと思います。基本的に、夜間に展開されるシステムでこのファイルを受信して​​おり、接続が機能することを確認するために、開始する前に cron ジョブを使用してこのファイルを編集したいと考えています。

4

2 に答える 2

2

これに使用しようとする気にしないでくださいsed。それは可能sedですが、間違ったツールです。

awk代わりに使用してください。最初に出現した "5027,5028" を A3 に置き換え、2 番目を A4 に置き換えます。

awk '/5027,5028/ && count < 2 { if( count ++ ) repl="A4"; else repl="A3";
    sub( "5027,5028", repl)} 1' input

2 番目の置換は演習として残します。基本的には同じで、 awk を 2 回実行するか、上記の句を追加するだけです。

元のファイルを上書きするには、シェル リダイレクトを使用します。

awk ... input > tmpfile && mv tmpfile input 
于 2013-02-18T14:22:41.047 に答える
1

これはあなたのために働くかもしれません(GNU Sed):

sed '1,/5027,5028/s/5027,5028/A3/;s/5027,5028/A4/;1,/5026/s/5026/A1/;s/5026/A2/' file
于 2013-02-18T15:01:38.553 に答える