仅提取双引号后的子字符串 - grep

Ram*_*esh 10 grep sed perl

我有一个文件,如下所示。

<a href="http://firstlink.com" title="title1">
<a href="http://secondlink.com" title="title2">
<a href="http://thirdlink.com" title="title3">
<a href="http://fourthlink.com" title="title4">
Run Code Online (Sandbox Code Playgroud)

我正在尝试仅从上述文件中提取 URL。我正在使用以下命令。

grep -o '\".*\"' new.txt
Run Code Online (Sandbox Code Playgroud)

但是,上面的命令给了我输出,

"http://firstlink.com" title="title1">
"http://secondlink.com" title="title2">
"http://thirdlink.com" title="title3">
"http://foruthlink.com" title="title4">
Run Code Online (Sandbox Code Playgroud)

我试图只提取没有"". 所以,我的预期输出是,

http://firstlink.com
http://secondlink.com
http://thirdlink.com
http://fourthlink.com
Run Code Online (Sandbox Code Playgroud)

我应该如何更改 grep 命令?或者是否可以在 perl、awk 或 sed 命令中执行此操作?

dev*_*ull 15

你可以使用awk.

awk -F\" '{print $2}' filename
Run Code Online (Sandbox Code Playgroud)

将产生所需的输出。

使用sed

sed 's/[^"]*"\([^"]*\).*/\1/' filename
Run Code Online (Sandbox Code Playgroud)

使用grep

grep -oP '[^"]*"\K[^"]*' filename
Run Code Online (Sandbox Code Playgroud)

  • 这里解释了“\K”:/sf/answers/2350179261/ (2认同)

Emm*_*uel 12

正则表达式、流编辑器和解释器在这里是多余的。
使用旧的好

cut -d \" -f 2 < filename
Run Code Online (Sandbox Code Playgroud)