从列表中删除行

时间:2013-08-06 12:23:57

标签: shell ksh

需要您的帮助脚本,使用“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应该是空的。 感谢

阿萨夫

3 个答案:

答案 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