次のテキストファイルがあるとしましょう。 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\.
。キャレットは行の先頭で一致するように強制し、バックスラッシュはドットが「すべての文字」ではなく文字通りの点にのみ一致するようにします。これはエスケープされていない点の特別な意味です。これがない場合、パターンは1
URLの一部または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.
。