sedまたはgrep正規表現の問題

sedまたはgrep正規表現の問題

sedまたはgrepを使用して文字列からテキストフラグメントを抽出するのに問題があります。

私が使用するサンプル文字列は次のとおりです。

|a Milton, John, |d 1608-1674.

sedを使って「ジョン」を抽出することができ、フォーラムにいくつかの提案があります。

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

しかし、私は「ミルトン」のために苦労しています。

ベストアンサー1

行の先頭が次のようになると仮定して、|aパターンを少し変更してみましょう。

$ echo '|a Milton, John, |d 1608-1674.' | sed -E 's/^\|a ([^,]*), *([^,]*),.*/\1/'
Milton

sed -Eバックスラッシュなしでグループ化できるように拡張正規表現を使用します(...)。次に、先頭と|aスペースを一致させ、グループ内の次のコンマの前のすべての項目を選択し、スペースを([^,]*),無視し、␣*最初のグループと同じ方法で別のグループを選択します。,.*残りの行をすべて食べた後は、すべて最初のグループ\1(ここMilton)または2番目のグループ\2John)に置き換えることができます。

もちろん、|aこの特定のフィールドに何が含まれているのかを知らせ、フィールドの順序が異なる場合(たとえば|d ... |a ...)、他のものが必要です。

おすすめ記事