使用循环执行文本文件

时间:2008-12-06 00:38:10

标签: parsing text shell

我已将一些有价值的信息重定向到文本文件中。如何在循环中执行该文本文件的每一行?

我的想法是将我的文本文件加倍空间,然后使用循环来执行每行。我希望当我将文本文件加倍空间时,每一串命令都会有自己的行。

例如,此文本文件:

cat / etc / passwd |头-101 | tail -3 nl / etc / passwd |头-15 | cut -d':' - f1 cat / etc / passwd | cut -d':' - f1,5 | tee users.txt nl / etc / passwd |尾巴-1 | cut -f1 ls~ / home | nl |尾巴-1 | cut -f1 ls -lR / 2> / dev / null | sort -n -r +4 | head -1
当我加倍空间时,

应该是这样的:

cat / etc / passwd |头-101 |尾巴-3
nl / etc / passwd |头-15 | cut -d':' - f1
cat / etc / passwd | cut -d':' - f1,5 | tee users.txt
nl / etc / passwd |尾巴-1 |切-f1
ls~ / home | nl |尾巴-1 | cut -f1 ls -lR / 2> / dev / null | sort -n -r +4 | head -1

然后我会用一个循环来执行每一行。

这是我的剧本:

FILE="$1"

echo "You Entered $FILE"

if [ -f $FILE ]; then

tmp=$(cat $FILE | sed '/./!d' | sed -n '/regex/,/regex/{/regex/d;p}'| sed -n '/---/,+2!p' | sed -n '/#/!p' | sed 's/^[ ]*//' | sed -e\
s/[^:]*:// | sed -n '/==> /!p' | sed -n '/--> /!p' | sed -n '/"lab3.cmd"/,+1!p'\
 | sed -n '/======/!p' | sed -n '/regex/!p' | sed -n '/commands are fun/\
!p' | sed -n '/regex/!p')

fi

MyVar=$(echo $tmp > hi.txt)
echo "$MyVar"

这是正确的解决方法吗?

2 个答案:

答案 0 :(得分:1)

为什么不让行分隔符分隔命令?除非你的命令必须能够包含行分隔符,否则你不需要一个空行来分隔它们 - 然后如果它需要连续包含2个怎么办?

答案 1 :(得分:0)

我担心我不明白你要解决的问题。如果将命令写入名为commands.txt的文件中,则可以通过

执行它们
sh commands.txt

执行文件的每一行。如果你想在一个循环中这样做,我想你可能会尝试像

这样的东西
for i in *; do FILE="$i" sh commands.txt; done

也许您可以编辑您的问题,使其更具体一些?