参照番号付きファイルからURLを特定する方法は?

参照番号付きファイルからURLを特定する方法は?

次のテキストファイルがあるとしましょう。 Call it hello

1. https://www.google.ca/
2. https://www.bob.ca/
3. https://www.cat.ca/

参照番号が与えられたら、どのようにリンクを見つけることができますか?

$ grep hello '1.'   # (what should be here to just get the link?)

たとえば、次のように出力したいと思います。https://www.google.ca/ただ

答え1

grep コマンドを使用します。

grep --perl-regexp --only-matching '(?<=^1\. ).*' hello

いくつかの説明:

  • --perl-regexp Perl スタイル正規表現の有効化
  • --only-matching 一致する部分のみを表示
  • (?<=^1\.) は、前の行が「1.」で始まるという意味です。 '('^' = '行開始'制限)

提案通りユーザー 1404316、定数「1」は変数に置き換えることができます。

IDX=1
grep --perl-regexp --only-matching "(?<=^${IDX}\. ).*" hello

答え2

パターン(番号)にsedを使用して行を選択し、必要な部分だけを維持します。URL

-bash-4.4$ cat > toto
1. https://www.google.ca/
2. https://www.bob.ca/
3. https://www.cat.ca/
-bash-4.4$ sed '/2/ !d ; s/.*\ //' toto
https://www.bob.ca/
-bash-4.4$ 

答え3

法線grep自体は一致する線を提供します。役に立たない部分を取り除くことは別のステップです。

まず、もっと似たようなパターンが欲しいかもしれません^1\.。キャレットは行の先頭で一致するように強制し、バックスラッシュはドットが「すべての文字」ではなく文字通りの点にのみ一致するようにします。これはエスケープされていない点の特別な意味です。これがない場合、パターンは1URLの一部または12行の先頭の数字などと一致します。

その後、行の先頭の数字を削除する必要があります。sedここで非常に便利です。sed行の先頭の数字とピリオドとスペースを削除します。だから私たちは次のように書くことができます:

$ grep -e '^1\.' urls | sed 's/^[0-9]*\. //'

ただし、sed置換コマンドを条件として使用することもできます。これは与えられた数字をnullに置き換え、置換が完了した後に結果行を印刷しようとします。

$ sed -ne 's/^1\. //p' urls

-nデフォルトの動作であるすべての行を印刷しないことを意味します。)

答え4

awkを使用する方が簡単です。

$ awk '"2."==$1{print $2}' hello

https://www.bob.ca/

別の行を選択する代わりに、必要な番号を使用してください2.

関連情報