-1

wgetという名前のスクリプトがありますChktitle.sh-- このスクリプトは以下のようなコマンドを受け取ります

$ Chktitle.sh "my url"

url.txt次に、Web ページのタイトルを確認するための URL と IP を含む 100 行を超えるファイル名があります。それから私はresults.txt空のファイルとして持っています。

ファイル内の各行に対して、以下のような反復アクションを実行する方法はありますか?

 Grab line1 from url.txt
 -----
 then execute Chktitle.sh "line1"
 -----
 Now save the result for line1 in results.txt
 -----
 Now goto Line2 ........


 etc etc etc

前の行が終了した後にのみ次の行が実行されるようにする必要があります。これを実行する簡単な方法を教えてもらえますか? 私は喜んで Perl や sh を使用し、他の言語を検討します..

の内容chktitle.sh:

#!/bin/bash
string=$1"/search/"
wget --quiet -O - $string \
| sed -n -e 's!.*<title>\(.*\)</title>.*!\1!p'
4

4 に答える 4

0

Perl でこれを行う方法は次のとおりです。

use warnings;
use strict;
use LWP::Simple;

my $inputFile = 'url.txt';
open (my $fh, '<', $inputFile) or die "Could not open file '$inputFile': $!\n";
while (<$fh>) {
    my $url=chomp;
    my $str=get($url);
    if (! defined $str) {
        warn "Could not find page '$url'\n";
        next;
    }
    my ($title)=$str=~ m{<title>(.*?)</title>}s;
    if (! defined $title) {
        warn "No title in document '$url'\n";
        next;
    }
    print "$title\n";
}
close ($fh);
于 2014-12-07T11:40:48.360 に答える
-2

次のように、2 つのパラメーターを使用してスクリプトを作成できます。

コマンドラインでのスクリプトの動作

< script >  < path to url file >    <path to excuting script>

. コードは説明とともに次のように分類されます

ステップ1

#!/bin/bash
 rm -f "/root/Desktop/result.txt 2> /dev/null 

新しい空のファイルを作成できるように、result.txt という名前のファイルをすべて削除します。

ステップ2

while read -r my_url; do 
"$2" "$my_url" >> "/root/Desktop/result.txt" 
done < "$1"

URL ファイル (「$1」として知られている) のすべての行を読み取る while do ループを設定します。

読み取った各行は「my_url」として保存されます。

ループは、スクリプト script (Chktitle.sh - $2) の後に "my_url" として知られる行を読み取り、それをコマンド ラインで実行し、出力を result.txt にリダイレクトします。これは行ごとに行われます。

次のように、すべてのコードを 1 つのスクリプトにまとめましょう。

#!/bin/bash
rm -f result.txt 2> /dev/null
while read -r my_url; do
"$2" "$my_url" >> "/root/Desktop/result.txt"
done < "$1"
于 2014-12-04T22:46:21.177 に答える