我有多个文件,其中包含很长的命令列表。我无法一次性运行它们,所以我需要一种智能的方式来从文件中读取和执行以及在完成后删除命令。
到目前为止,我已经尝试了
for i in filename.txt ; do ; execute $i ; sed -s 's/$i//' ; done ;
但它不起作用。在我介绍sed
之前,$i
正在执行。现在即使这样也行不通。
我想到了一种解决方法,我将读取第一行并删除第一行,直到文件为空。
有更好的想法或命令吗?
答案 0 :(得分:0)
我认为你想要做的是这样的事情:
while read -r -- i; do $i; sed -i "0,/$i/s/$i//;/^$/d" filename.txt; done < filename.txt
将文件读入循环。执行每一行,sed命令只删除它找到的第一个条目,然后删除空行。
答案 1 :(得分:0)
我认为这样做的一种方法是让所有命令的源文件都被执行,执行命令的脚本也会写入第二个日志文件,列出执行时的文件。 如果需要恢复该过程,则需要处理源文件中日志文件中不存在的行。
logfile=commands.log
srcfile=commands.src
oldfile=commands.old
trap "mv $oldfile $logfile; exit 1" 0 1 2 3 13 15
[ -f $logfile ] || cp /dev/null $logfile
cp $logfile $oldfile
comm -23 $srcfile $logfile |
while read -r line
do
echo "$line" >> $oldfile
($line) < /dev/null
done
mv $oldfile $logfile
trap 0
答案 2 :(得分:0)
这应该适合您,list.txt是包含命令的文件。
确保在运行之前备份命令文件。
while read line; do $line;sed -i '1d' list.txt;done < "list.txt"
sed -i就地编辑所以list.txt将在循环中更改,你最终会得到一个空文件。