1

需要您对使用“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 应该是空的。谢谢

阿萨夫

4

3 回答 3

2

您也可以在每次读取时从中删除一行。有了这个,如果脚本被中断,“$FILE”中剩下的就是唯一尚未处理的。

FILE=<filename>
while read SERVER < "$FILE"; do
    sed -i 1d "$FILE"
    ping "$SERVER"
done
于 2013-08-06T12:38:59.917 回答
1

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

这太可怕了!

于 2013-08-06T13:12:11.280 回答
0

如果最后应该为空,请在循环后将其清空:

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
于 2013-08-06T12:32:16.613 回答