0

貴重な情報をテキスト ファイルにリダイレクトしました。そのテキスト ファイルの各行をループで実行するにはどうすればよいですか?

私が考えているのは、テキスト ファイルのスペースを 2 倍にし、ループを使用して各行を個別に実行することです。テキストファイルをダブルスペースすると、コマンドのすべての文字列が独自の行になることを願っています。

たとえば、次のテキスト ファイルです。

猫 /etc/passwd | ヘッド-101 | テール -3 nl /etc/passwd | ヘッド-15 | カット -d':' -f1 猫 /etc/passwd | カット -d':' -f1,5 | ティー users.txt nl /etc/passwd | テール -1 | カット -f1 ls ~/ホーム | nl | テール -1 | カット -f1 ls -lR / 2>/dev/null | 並べ替え -n -r +4 | 頭-1

スペースを2倍にすると、次のようになります。

猫 /etc/passwd | ヘッド-101 | テール -3
nl /etc/passwd | ヘッド-15 | カット -d':' -f1
猫 /etc/passwd | カット -d':' -f1,5 | ティー users.txt
nl /etc/passwd | テール -1 | カット -f1
ls ~/ホーム | nl | テール -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"

これは正しい方法ですか?

4

2 に答える 2

1

行区切り文字でコマンドを区切らないのはなぜですか? コマンドに行セパレーターを含めることができる必要がない限り、それらを区切るために空白行は必要ありません。

于 2008-12-06T00:43:17.763 に答える
0

残念ながら、あなたが解決しようとしている問題が理解できません。コマンドを commands.txt というファイルに書き込めば、次のように実行するだけです。

sh commands.txt

これにより、ファイルの各行が実行されます。これをループで実行したい場合は、次のようなことを試してください。

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

おそらく、質問を編集してもう少し具体的にすることはできますか?

于 2008-12-06T01:46:57.073 に答える