4

特殊なパターンで始まる行を特定し、行末に何かを追加するにはどうすればよいですか?

追加すべきパターンがまだ追加されていない場合

ホスト ファイル内の特定の行を、先頭のパターンによって IP アドレスであるか、またはその行の上にあるコメントによって見つけたいとします。

例は次のとおりです。

#This is your hosts file

127.0.0.1 localhost linux 

#This is added automatically 

192.168.1.2 domain1. com 

#this is added automatically to 

192.168.1.2 sub.domain1.com www.domain1.com

私が教えた IP を見つけたときに bash に伝えるにはどうすればよいですか。行末に行き、何かを追加する

または他の場合

bash がコメントを見つけたとき#This is added automatically

2 つ下に移動し、行末に移動して何かを追加します

私は初心者で、ここで何をどのように使用すればよいかわかりません。disはsedによって行われますか?またはこれはgrepで行うことができますか?そのためにAWKを学ぶ必要がありますか?

4

3 に答える 3

9

これにより、行末に「127.0.0.1」というパターンでテキストが追加されます。

grep -F "127.0.0.1" file | sed -ie 's/$/& ADDing SOME MORE TEXT AT THE END/g'

127.0.0.1以下は、 via sedで始まるファイルの行に追加されます。

sed -ie 's/^127.0.0.1.*$/& ADDing MORE TEXT TO THE END/g' file

同じことを行うには、次を使用することもできますawk

awk '/^127.0.0.1/{print $0,"ADD MORE TEXT"}' file > newfile && mv newfile file
  • 編集

変数を介して IP アドレスを呼び出したい場合は、構文が少し異なる可能性があります。

var="127.0.0.1"
grep -F "$var" file | sed -ie 's/$/& ADD MORE TEXT/g'
sed -ie "s/^$var.*$/& ADD MORE TEXT/g" file
awk '/^'$var'/{print $0,"ADD MORE TEXT"}' file > newfile && mv newfile file
于 2013-09-18T16:54:28.207 に答える
1

このインライン sed は機能するはずです。

sed -i.bak 's/^192\.168\.1\.2.*$/& ADDED/' hosts 
  1. この sed コマンドは、で始まる行を検索します192.168.1.2
  2. ADDED見つかった場合は、それらの行の最後に追加します
于 2013-09-18T16:55:39.260 に答える