sedを使用して最初の一致を抽出する

sedを使用して最初の一致を抽出する

一連の線形があります。

Agenda HR-1 Presented by XYZ
HR-2 Debate-1 - All
HR-3 Debate-2 - All
(Cov-4) Conclusion 

[A-Za-z]\+-[0-9]\+各行には、1つ以上の文字、ダッシュ(-)、および1つ以上の数字で構成される(sed)パターンのIDがあります。キューのどこにでも表示されます。

IDを抽出する必要があります。私の考えは.*始めと終わりにaを貼り付けて印刷することですが、うまくいきません\1

これ回答によると、sedは最初の一致のみを置き換えると言われています。これは正しいです。

$ cat /tmp/scratch/x | sed -n   's/\<\([A-Za-z]\+-[0-9]\+\)/ID:\1/p'
Agenda ID:HR-1 Presented by XYZ
ID:HR-2 Debate-1 - All
ID:HR-3 Debate-2 - All
(ID:Cov-4) Conclusion

しかし、もちろん.*貪欲に最後のゲームに向かうことから始まります。

$ cat /tmp/scratch/x | sed -n   's/.*\<\([A-Za-z]\+-[0-9]\+\).*/ID:\1/p'
ID:HR-1
ID:Debate-1
ID:Debate-2
ID:Cov-4

私が考えることができる唯一の方法sedは、以下のように1つのコマンドからIDの周りにマーカーを追加し、別のコマンドを使用してそれを抽出することです。

sedでこれを行うより良い方法はありますか?

$ cat x | sed -n   's/\<\([A-Za-z]\+-[0-9]\+\)/<id>\1<~id>/;s/.*<id>\(.*\)<~id>.*/\1/;p'
HR-1
HR-2
HR-3
Cov-4

ベストアンサー1

GNUを使用してawk次のことを試してください。

gawk -v FPAT='[A-Za-z]+-[0-9]+' '$1{print $1}' FILE

または:

gawk -v FPAT='[A-Za-z]+-[0-9]+' '$0=$1' FILE

おすすめ記事