0

次の /etc/hosts ファイルがあります

[root@vhost41 tmp]# cat hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
119.13.248.1 ccvcds1.ihost.com vcds1
171.221.160.11 vhost.ihost.com vhost41


[root@vhost41 tmp]# echo $(ifconfig eth0 | grep "inet addr:" | cut -d ":" -f 2 | cut -d " " -f 1)
171.221.160.11

sed または awk を使用して 1 行を使用して、一致する ip 行に「AWSHOST」を追加するにはどうすればよいですか。したがって、変更は次のようになります。

[root@vhost41 tmp]# cat hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
119.13.248.1 ccvcds1.ihost.com vcds1
171.221.160.11 vhost.ihost.com vhost41 AWSHOST

上記のコマンドの出力を sed および awk にパイプしようとしましたが、機能していません。どんな助けでも大歓迎です

4

3 に答える 3

2

これにそのまま使用できますsed

$ cat /etc/hosts
127.0.0.1       localhost
171.1.1.1 myhost

$ sudo sed -i 's/\(171\.1\.1\.1\).*/&\ mynewhost/g' /etc/hosts

$ cat /etc/hosts
127.0.0.1       localhost
171.1.1.1 myhost mynewhost

アンパサンド&は、キャッチされた式に置き換えられます。たとえば171.1.1.1 myhost、ここで、エスケープされたスペースと新しいホスト エイリアスを追加します。mynewhost

編集

David Ravettiが述べたように、ファイルをその場で編集したくない場合は、バックアップ ファイルに拡張子を追加することができます。

sed -i .bak ......

その後、ファイルはその場で編集されます (編集内容に置き換えられます) が、元のファイルは拡張子付きでバックアップされます.bak

于 2013-01-17T18:09:05.717 に答える
2
sed -i "/$(ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | cut -d' ' -f1)[ \t]/ s/$/ AWHOST/ " hosts
于 2013-01-17T18:11:09.263 に答える
1

これを試して

sed -i "s/\(171.221.160.11\) \(.*\)/\1 \2 MYHOST/g" temp.txt

そしてこれはawk

awk '{if ($1 == "171.221.160.11") {b=$1;for(i=1; i<=NF; ++i){$1="";a=a" "$i;}$0 =b" "a" ""MYHOST3" } print}' temp.txt > temp2.txt

sedどちらを選択するか決めることができなかったawkので、今では常に両方を選択しています:)

于 2013-01-18T01:58:30.067 に答える