需要您的帮助脚本,使用“for”命令删除行。
file1 - contains list of servers
dog
cat
eel
ape
然后对每一行做一些事情(例如ping) 但每次从列表中删除第一行......
这就是我所做的,但它运作良好
#!/bin/ksh -x
for server in `cat file1`
do
ping $server
sed '1d' file1
done
在脚本的末尾,file1应该是空的。 感谢
阿萨夫
答案 0 :(得分:2)
每次阅读时,您也可以从中删除一行。如果脚本被中断,那么“$ FILE”中剩下的内容是唯一尚未处理的内容。
FILE=<filename>
while read SERVER < "$FILE"; do
sed -i 1d "$FILE"
ping "$SERVER"
done
答案 1 :(得分:1)
sed
不会改变输入文件,它只会改变它的模式缓冲区,它被写入stdout(默认情况下)。您无法使用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
这太可怕了!
答案 2 :(得分:0)
如果它最后应为空,请在循环后将其清空:
for server in `cat file1`
do
ping $server
done
echo '' > file
否则,在sed中添加-i以编辑源文件:
for server in `cat file1`
do
ping $server
sed -i '1d' file1
done