grep、sed、またはawkを使ってその間にある単語を見つけますか? .el7までパッケージ名を抽出できるようにしたい


1

私はスクリプト(bash /コマンドライン)を書いていて、.el7までパッケージ名を抽出できるようにしたいです。

x=dbus-sharp (パッケージ名の例 - 変更されています)

テキストファイルの例:

Building dbus-sharp-0.7.0-11.fc22 for epel7
Created task: 7970206
...
0 free  1 open  1 done  0 failed
  7970225 buildArch (dbus-sharp-0.7.0-11.el7.src.rpm, ppc64): free
  7970223 buildArch (dbus-sharp-0.7.0-11.el7.src.rpm, x86_64): open (buildhw-03.phx2.fedoraproject.org)
...

基本的に今欲しい

y=dbus-sharp-0.7.0-11.el7

grep、sed、またはawkを使用する必要があるかどうかは関係ありません。

私は似たような解決策のために何の幸運なグーグルも持っていませんでした。

私が試した例:

[me@h dbus-sharp]$ echo "Here is a String" | grep -Po '(?<=(Here )).*(?= String)'
is a

[me@h dbus-sharp]$ cat scratchdbus-sharp | grep -Po '(?<=(dbus)).*(?= el7)'
(no output?)

[me@h dbus-sharp]$ cat scratchdbus-sharp | awk '/dbus/,/el7/'
(it dumps the whole text file?)

[me@h dbus-sharp]$ sed -n "/dbus/,/el7/p" scratchdbus-sharp
(again the whole text file is dumped)

[me@h dbus-sharp]$ grep -m 1 "dbus-sharp" scratchdbus-sharp 
Building dbus-sharp-0.7.0-11.fc22 for epel7

私はまた注意する必要があると思います ep el7はテキストファイルに含まれているため、 'el7'に一致して複雑になります。

回答:


0

A grep 溶液:

grep -m 1 -oP 'dbus[^ ]+\.el7' file

-m 1 マッチを1つだけ印刷します。 -o 一致部分と-PのみがPerl正規表現を使用します。

そして、 sed 溶液:

sed -n 's/.*\(dbus.*\.el7\).*/\1/p' file | head -1

前後のすべてを削除します dbus.*el7 そしてそれを印刷します( p )、ただし最初の試合のみ head -1


私はそれがこのように動作するようになりました: grep -m 1 -oP $(echo $x)'[^ ]+\.el7' scratchgio-sharp あなたはどうやってこの[^] + \を使うために考え出したのか説明してもらえますか?それとも[^] + \何ですか?ありがとう。
quickbooks

1
確かに@quickbooks、 [^ ]+ 間に文字があることを意味します。 ^ スペース \ 。の + 少なくとも1つ以上あることを意味します。 epel7行も見つかったのでそれを使います。しかし前のポイントで el7 - &gt; .el7 それは十分であるべきです、それはあまりにもうまくいくはずです: grep -m 1 -oP 'dbus.*\.el7' file
chaos

`[^] +`の意味を説明してくれてありがとう。はい、 grep -m 1 -oP $(echo $x)'.*\.el7' scratch$x また働きます。 sedを使用した別の解決策では、s /.* \と。* / \ 1 /が括弧の前後のすべてを削除することをどのように考え出したか説明してください。または/.* \と。* / \ 1 /の意味は?再度、感謝します。
quickbooks

1
sedコマンドの@quickbooksは、検索と置換を意味します。最初の2つのスラッシュの間にあるものを検索し、スラッシュ2と3の間にあるもので置き換えます。 .* すべてのものに一致することを意味します。大括弧()内の部分は、次に検索するものです。そのため、行全体を\ 1に置き換えます。 \ 1は大括弧()の中にあるサブパターンを意味します。末尾のpは印刷を表します。
chaos
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.