Chinaunix

标题: 关于文件修改的问题 [打印本页]

作者: spking    时间: 2008-12-26 13:18
标题: 关于文件修改的问题
文件如下:
10.238.70.19 shuguan172 1 161
10.238.70.190 shuguan172 1 161
10.238.70.129 shuguan172 1 161
10.238.70.130 shuguan172 1 161
10.238.70.131 shuguan172 1 161
10.238.70.132 shuguan172 1 161

我要如何用命令将文件改成:
#10.238.70.19 shuguan172 1 161
10.238.70.190 shuguan172 1 161
10.238.70.129 shuguan172 1 161
#10.238.70.130 shuguan172 1 161
10.238.70.131 shuguan172 1 161
10.238.70.132 shuguan172 1 161

用ip地址为条件,在符合条件的行前面加上#号
作者: 我是DBA    时间: 2008-12-26 13:22
sed 's/条件/#&/g' ufile
作者: xmbbx    时间: 2008-12-26 13:26
for IP in $(cat ip.txt)
do
sed -i 's/$IP/#$ip/' doc.txt
done
作者: ynchnluiti    时间: 2008-12-26 13:28
原帖由 xmbbx 于 2008-12-26 13:26 发表
for IP in $(cat ip.txt)
do
sed -i 's/$IP/#$ip/' doc.txt
done

$ip -> $IP 或者& :wink:
作者: spking    时间: 2008-12-27 16:55
root@v210-2 # more 1
10.238.70.19 shuguan172 1 161
10.238.70.190 shuguan172 1 161
10.238.70.129 shuguan172 1 161
10.238.70.130 shuguan172 1 161

root@v210-2 # more 2
10.238.70.19
10.238.70.130

我用下面的循环不起作用:
for IP in $(cat 2)
do
echo $IP
sed 's/$IP/#&/g' 1 > 3
done

写成这样就可以:
for IP in $(cat 2)
do
echo $IP
sed 's/10.238.70.130/#&/g' 1 > 3
done

$IP这样应用变量是不是不对啊?
作者: HH106    时间: 2008-12-27 17:02
原帖由 spking 于 2008-12-27 16:55 发表
我用下面的循环不起作用:
for IP in $(cat 2)
do
echo $IP
sed 's/$IP/#&/g' 1 > 3
done

写成这样就可以:
for IP in $(cat 2)
do
echo $IP
sed 's/10.238.70.130/#&/g' 1 > 3
done

$IP这样应用变量是不是不对啊?

改成这样子
双引号sed "s/$IP/#&/g" 1 > 3
或sed 's/'$IP'/#&/g' 1 > 3
作者: spking    时间: 2008-12-27 17:12
# cat 1
10.238.70.19 shuguan172 1 161
10.238.70.190 shuguan172 1 161
10.238.70.129 shuguan172 1 161
10.238.70.130 shuguan172 1 161

# cat 2
10.238.70.19
10.238.70.130

for IP in $(cat 2)
do
echo $IP
sed 's/'$IP' /#&/g' 1 > 3
done

#cat 3
10.238.70.19 shuguan172 1 161
10.238.70.190 shuguan172 1 161
10.238.70.129 shuguan172 1 161
#10.238.70.130 shuguan172 1 161

为什么10.238.70.19前面没有加上#号?
作者: HH106    时间: 2008-12-27 17:26
最后>覆盖了,用
sed -i 's/'$IP' /#&/g' 1
作者: ynchnluiti    时间: 2008-12-27 17:48
  1. awk 'NR==FNR{a[$1]="#"$1}NR>FNR{if($1 in a)$1=a[$1];print}' 2 1 >3
复制代码

作者: spking    时间: 2008-12-27 18:14
原帖由 HH106 于 2008-12-27 17:26 发表
最后>覆盖了,用
sed -i 's/'$IP' /#&/g' 1


root@v210-2 # sed -i 's/10.238.70.19 /#&/g' 1
sed: illegal option -- i

不支持-i参数?
作者: 我是DBA    时间: 2008-12-27 21:49
原帖由 spking 于 2008-12-27 18:14 发表


root@v210-2 # sed -i 's/10.238.70.19 /#&/g' 1
sed: illegal option -- i

不支持-i参数?

那你用楼上那位的吧




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