需要您对使用“for”命令删除行的脚本提供帮助。
file1 - contains list of servers
dog
cat
eel
ape
然后对每一行做一些事情(例如ping),但每次它从列表中删除第一行......</p>
这就是我所做的,但效果不佳
#!/bin/ksh -x
for server in `cat file1`
do
ping $server
sed '1d' file1
done
在脚本的末尾, file1 应该是空的。谢谢
阿萨夫
您也可以在每次读取时从中删除一行。有了这个,如果脚本被中断,“$FILE”中剩下的就是唯一尚未处理的。
FILE=<filename>
while read SERVER < "$FILE"; do
sed -i 1d "$FILE"
ping "$SERVER"
done
sed
不会更改输入文件,它只会更改其模式缓冲区,该缓冲区被写入标准输出(默认情况下)。您不能使用sed
. 我更喜欢这个:
while read server
do
ping "$server"
done < file1
# empty the file
> file1
但是,如果您真的必须保持文件同步,那么:
while read server < file1
do
ping "$server"
tail -n +2 file1 > file1.new
mv file1.new file1
done
这太可怕了!
如果最后应该为空,请在循环后将其清空:
for server in `cat file1`
do
ping $server
done
echo '' > file
否则,将 -i 添加到 sed 以编辑源文件:
for server in `cat file1`
do
ping $server
sed -i '1d' file1
done