web-dev-qa-db-ja.com

二重引用符の後の部分文字列のみを抽出する-grep

以下のようなファイルがあります。

<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">

上記のファイルからURLのみを抽出しようとしています。以下のコマンドを使用しています。

grep -o '\".*\"' new.txt

ただし、上記のコマンドでは、次のような出力が得られます。

"http://firstlink.com" title="title1">
"http://secondlink.com" title="title2">
"http://thirdlink.com" title="title3">
"http://foruthlink.com" title="title4">

""なしでURLのみを抽出しようとしています。だから、私の期待される出力は、

http://firstlink.com
http://secondlink.com
http://thirdlink.com
http://fourthlink.com

Grepコマンドを変更するにはどうすればよいですか?または、Perl、awk、sedコマンドでそれを行うことは可能ですか?

7
Ramesh

awkを使用できます。

awk -F\" '{print $2}' filename

望ましい出力を生成します。

sedの使用:

sed 's/[^"]*"\([^"]*\).*/\1/' filename

grepの使用:

grep -oP '[^"]*"\K[^"]*' filename
12
devnull

正規表現、ストリームエディター、インタープリターはここでは過剰です。
古き良きものを使うcut

cut -d \" -f 2 < filename
10
Emmanuel

他の回答のいくつかは最初の要素であるhrefに依存するため、これはより移植性があります

grep -o href.*\" file.txt | cut -d \" -f 2
1
zindigo
sed 's/.*"\(http.*\)" .*/\1/' filename
1
dingrui