【问题标题】:Using a loop to execute text file使用循环执行文本文件
【发布时间】:2008-12-06 00:38:09
【问题描述】:

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

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

例如,这个文本文件:

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

当我加倍空格时应该是这样的:

cat /etc/passwd |头-101 |尾-3
nl /etc/passwd |头-15 |剪切 -d':' -f1
cat /etc/passwd |剪切 -d':' -f1,5 |发球用户.txt
nl /etc/passwd |尾-1 |剪切-f1
ls ~/home |荷兰 |尾-1 |剪切-f1 ls -lR / 2>/dev/null |排序 -n -r +4 |头-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"

这是正确的做法吗?

【问题讨论】:

    标签: parsing text shell


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      恐怕我不明白您要解决的问题。如果您将命令写入一个名为 commands.txt 的文件中,您可以简单地通过

      sh commands.txt
      

      执行文件的每一行。如果您想循环执行此操作,我想您可以尝试类似

      for i in *; do FILE="$i" sh commands.txt; done
      

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

      【讨论】:

        猜你喜欢
        • 2017-12-04
        • 2014-05-18
        • 1970-01-01
        • 2014-11-03
        • 1970-01-01
        • 2016-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多