如何在给定参考号的情况下从文件中 grep URL?

如何在给定参考号的情况下从文件中 grep URL?

假设我有一个像这样的文本文件: Called it hello

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

如果给出参考号,我将如何 grep 链接?

$ 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 一部分的 a 或12行开头的数字等。

然后,您需要删除行开头的数字。sed在这里很有用。sed将删除任意数量的数字,加上一个点,以及行首的一个空格。所以我们可以这样写:

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

但是sed的替换命令也可以作为一个条件,这会尝试将给定的数字替换为空,并在替换完成后打印结果行:

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

-n意味着不打印所有行,这是默认行为。)

答案4

使用 awk 更简单:

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

https://www.bob.ca/

使用您选择的任何数字而不是2.选择其他行。

相关内容