2016-06-18 12 views
0

500個のIPアドレスのリストを持つテキストファイルを開きたいとします。私は、行の1つに次の変更を加えてファイルを保存したいと思います。 awkやsedでそれを行うことは可能ですか?awkはテキストファイルの行を置き換えて保存します

現在の行:

100.72.78.46:1900

変更:

100.72.78.46:1800

+2

可能な複製を:

は最終的に、私はまた、あなたが行ごとに1つだけのIPアドレスを持っている場合、あなたはまた、誤った交換を防止し、行の先頭と末尾のための特殊文字^$を使用することができ、ことに気づき[行全体をsedに置き換える方法は?](http://stackoverflow.com/questions/8822097/how-to-replace-whole-line-with-sed) – hek2mgl

+0

「これを行うことは可能ですか?テキストを操作することに関するawkの質問は "はい"です。 [ask]をお読みください。 –

答えて

0

次でそれを達成することができます

sed -ie 's/100.72.78.46:1900/100.72.78.46:1800/' file.txt 

iオプションは元のファイルを更新し、バックアップファイルが作成されます。これはパターンの最初のオカレンスのみを編集します。あなたが一致するすべてのパターンを交換したい場合は、最後の/

後にこのソリューションをgを追加します(ただし、コメントに指摘など)72100.72.78.46:180032に変身だろうな72100372578146:190032など他の多くの場合、中に失敗しました。

ことを回避するために、あなたは完全一致をしなければならないだろう、ともない.などの特殊文字(hereを参照)の治療:

sed -ie 's/\<100\.72\.78\.46:1900\>/100.72.78.46:1800/g' file.txt 

ノート\.\<...\>「単語の境界を正確な一致のための記法。この解決法は私のためにLinuxマシン上で動作しましたが、MACでは動作しませんでした。 [[:<:]]...[[:>:]]はあなたに完全一致を与えるだろうどこ

sed -ie 's/[[:<:]]100\.72\.78\.46:1900[[:>:]]/100.72.78.46:1800/g' file.txt 

:そのためには、少し異なる構文を(hereを参照)を使用しなければならないでしょう。

sed -ie 's/^100\.72\.78\.46:1900$/100.72.78.46:1800/g' file.txt 
+0

これは、さまざまな入力ファイルの内容を考えると失敗します。例えば、 '72100372578146:190032'を' 72100.72.78.46:180032'に変換します。必要なテキストを見つける/変更するのは簡単ですが、必要のないテキストを見つけたり変更したりするのはずっと難しく、小さなサンプル入力のほうが期待される出力を生成するスクリプトは、解決策を見つける出発点です。終点。 1つの晴れた日だけではなく、見つけにくいかもしれないと思われるケースや見つけたくないケースを考慮して、サンプルの入出力を投稿するときに重要です。 –

+1

はい、あなたは絶対に正しいです。私はより一般的な意味でそれを働かせるために私の応答を編集します。ありがとう! –

関連する問題