文字の後にスペースと句読点を見つけるためにgrepする方法は?

文字の後にスペースと句読点を見つけるためにgrepする方法は?

10909101 - testingName - Log8767, File787 - 8:50PM  

testingNamegrepを使って出力を取得したいのですが。

最初の数字の桁数は異なる可能性があるため(他の行が最初の数字になる可能性があるため12)、数値ベースのgrepは使用できません。それでは、この問題をどのように解決するのですか?

答え1

すべてのデータが同じ形式であることを考慮すると、grepこれは誤ったツールです。もちろん、使用できますが、使用するのは面倒です。grepもともと設計された用途ではなく、より良いツールですawk

区切り文字は常に「空白、ダッシュ、空白」の順番なので、-次のようにできます。

$ awk -F' - ' '{print $2}' <filename>

<filename>検索中のデータを含むファイルの名前はどこにありますか?ファイル全体のすべての行を2番目の項目にカットすることで取得できます。 3つの文字区切り文字を使用したくない場合は、次のようにします。

$ awk -F- '{print $2}' | tr -d ' '

スペースを含む最初から2番目の-すべての項目をつかみ、スペースを削除しますtr。もちろん、ファイル名にスペースがあると問題が発生するため、最初の例に従う必要があります。

答え2

これは以下を使用します。二つインスタンスgrepですが、はい純粋なgrep:

echo '10909101 - testingName - Log8767, File787 - 8:50PM  ' | \
grep -o '\- [[:alpha:]]* \-' | grep -o '[[:alpha:]]*'

出力:

testingName

関連情報