Использование цикла для выполнения текстового файла - PullRequest
0 голосов
/ 06 декабря 2008

Я перенаправил некоторую ценную информацию в текстовый файл. Как я могу выполнить каждую строку этого текстового файла в цикле?

Что я имею в виду, это сделать двойной пробел в моем текстовом файле, а затем использовать цикл для индивидуального выполнения каждой строки. Я надеюсь, что когда я сделаю двойной пробел в текстовом файле, каждая строка команд будет иметь свою собственную строку.

Например, этот текстовый файл:

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 | нл | хвост -1 | cut -f1 ls -lR / 2> / dev / null | сортировать -n -r +4 | голова -1

должно выглядеть так, когда я делаю двойные пробелы:

cat / etc / passwd | голова -101 | хвост -3
nl / etc / passwd | голова -15 | cut -d ':' -f1
cat / etc / passwd | cut -d ':' -f1,5 | тройник users.txt
nl / etc / passwd | хвост -1 | cut -f1
ls ~ / home | нл | хвост -1 | cut -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"

Это правильный путь?

Ответы [ 2 ]

1 голос
/ 06 декабря 2008

Почему бы просто не использовать разделитель строк для разделения команд? Вам не нужна пустая строка для их разделения, если только ваша команда не должна содержать разделители строк - и что, если в ней должно содержаться 2 в строке?

0 голосов
/ 06 декабря 2008

Боюсь, я не понимаю проблему, которую вы пытаетесь решить. Если вы пишете команды в файл с именем commands.txt, вы можете выполнить их просто

sh commands.txt

Выполняет каждую строку файла. Если вы хотите сделать это в цикле, я полагаю, вы можете попробовать что-то вроде

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

Возможно, вы можете отредактировать свой вопрос, чтобы сделать его более конкретным?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...