Chinaunix

标题: sed命令中引用变量的问题 [打印本页]

作者: bikkuri    时间: 2014-04-29 03:09
标题: sed命令中引用变量的问题
大家好!我有一个问题向大家请教。
假如我有以下两个文本文件:
  1. [root@hp8 public_html]# grep 135.240.146.1 ~/.ssh/known_hosts
  2. 135.240.146.101 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEA0vWo8DB2iGAGsWWw4TJNEC4pj8VhIxc8kRsg6kP5rR/kKQ3iP41vmv6n1JUygnTo9A7yX69UuU4NeNE=
  3. 135.240.146.102 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAo9U6FLjVJgpJ3iml8j0kI4YzCsou+okqm76QFAT9XYl41/rbBqYh85ecaK1wVBBkqcdxFclINravCbo=
  4. 135.240.146.103 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAmmQyWwF2pMEgIE+s9z4vWaLYMRdMCrKGhPZXJogNXB2ReG3j0nITzii3/mg03dTOUOH0ECprRfdTT6+=
  5. 135.240.146.104 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEArnang+TphX+Mk638BCLf5RirG+oJzLVWtVNa8KCZXdnSmipETujOkAbo3B6pe8ziJPp5lRshmVx5/AT=
  6. 135.240.146.105 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAwbFm8b45q4OHzonbX5PkrRFtKd4qPloEi28MEwvXqzbGIiawLn3gxDjekkZDoljGsIZMNEYBgLA90F5=
  7. [root@hp8 public_html]# cat nodes.list
  8. node101 135.240.146.101
  9. node102 135.240.146.102
  10. node103 135.240.146.103
  11. node104 135.240.146.104
  12. node105 135.240.146.105
复制代码
然后我想从~/.ssh/known_hosts文件中删除所有含有nodes.list中提到的IP地址的行。
我写了以下程序段想实现这一功能,但是很遗憾的是执行该程序段后,并没有任何一行被删除。
  1. nodelist=./nodes.list
  2. for ip in $(awk '{print$2}' $nodelist) ; do
  3. sed -i '/$ip/d' ~/.ssh/known_hosts
  4. done
复制代码
而我执行sed -i '/135.240.146.101/d' ~/.ssh/known_hosts命令时是可以删除含有135.240.146.101的行的。
所以我想问一下在sed命令中应该如何引用变量呢?
作者: bikkuri    时间: 2014-04-29 03:27
试了http://dadi.me/1064提到的各种方法,居然没有一个有效的。
作者: Shell_HAT    时间: 2014-04-29 08:02
  1. sed -i "/$ip/d" ~/.ssh/known_hosts
复制代码

作者: bikkuri    时间: 2014-04-29 08:47
见鬼了。。。昨天晚上我试过sed -i "/$ip/d" ~/.ssh/known_hosts不行的。。。今天早上再试又可以了。。。
谢谢您的回复。

Shell_HAT 发表于 2014-04-29 08:02

作者: yestreenstars    时间: 2014-04-29 08:51
也可以这样:
  1. sed -i '/'"$ip"'/d' ~/.ssh/known_hosts
复制代码

作者: 刺客阿地    时间: 2014-04-29 13:07
我是来学习围观楼上两位的!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2