Linuxコマンドラインを使用していて、
127.0.0.1
128.0.0.0
121.121.33.111
が欲しいです
127.0.0.1:80
128.0.0.0:80
121.121.33.111:80
同僚がそのためにsedを使用していたのを覚えていますが、sedのマニュアルを読んだ後でも、コマンドラインでそれを行う方法がはっきりしませんか?
Linuxコマンドラインを使用していて、
127.0.0.1
128.0.0.0
121.121.33.111
が欲しいです
127.0.0.1:80
128.0.0.0:80
121.121.33.111:80
同僚がそのためにsedを使用していたのを覚えていますが、sedのマニュアルを読んだ後でも、コマンドラインでそれを行う方法がはっきりしませんか?
回答:
あなたは次のようなものを使ってみることができます:
sed -n 's/$/:80/' ips.txt > new-ips.txt
あなたのファイル形式があなたがあなたの質問で説明したとおりであるならば。
s///
置換コマンドの一致(発見)ファイル内の各行の終わり(使用して$
文字を)してから(追加置き換え):80
各行の終わりに。ips.txt
ファイルには、入力ファイルです...そしてnew-ips.txt
新たに作成したファイルです(変更の最終結果。)
また、(Vladによって指摘され、aragaerによって指定されたように)ポート番号がすでにアタッチされているIP番号のリストがある場合は、次のようなものを使用してみてください。
sed '/:[0-9]*$/ ! s/$/:80/' ips.txt > new-ips.txt
したがって、たとえば、入力ファイルが次のようになっている場合(に注意してください:80
):
127.0.0.1
128.0.0.0:80
121.121.33.111
最終結果は次のようになります。
127.0.0.1:80
128.0.0.0:80
121.121.33.111:80
s///
前に別のsed を実行して、各行の終わりにあるポート番号をすべて取り出すことができます。
sed '/:[0-9]*$/ ! s/$/:80/'
:80
が含まれている場合、次の行の先頭に追加されます。dos2unix
必要に応じて、まずファイルで使用します。
sed -i s/$/:80/ file.txt
sed
s tream ed itor
-i
i n-place(ファイルをインプレイス編集)s
s ubstitutionコマンド/replacement_from_reg_exp/replacement_to_text/
ステートメント$
行末に一致します(replacement_from_reg_exp):80
すべての行の最後に追加するテキスト(replacement_to_text)file.txt
ファイル名(同じファイル内の)各行の終わりにテキストを追加する場合は、-i
パラメーターを使用できます。次に例を示します。
sed -i'.bak' 's/$/:80/' foo.txt
ただし、-i
オプションは非標準のUnix拡張であり、すべてのオペレーティングシステムで使用できるわけではありません。
したがって、ex
(vi -e
/ と同等vim -e
)の使用を検討できます。
ex +"%s/$/:80/g" -cwq foo.txt
:80
各行に追加されますが、空白行に追加される場合があります。
したがって、より適切な方法は、行に実際に数値が含まれているかどうかを確認してから追加することです。次に例を示します。
ex +"g/[0-9]/s/$/:80/g" -cwq foo.txt
ファイルの形式がより複雑な場合は、ではなく適切な正規表現を使用することを検討してください[0-9]
。
後方参照技術を使用してこれを達成することもできます
sed -i.bak 's/\(.*\)/\1:80/' foo.txt
このようなawkでも使用できます
awk '{print $0":80"}' foo.txt > tmp && mv tmp foo.txt