私
10909101 - testingName - Log8767, File787 - 8:50PM
testingName
grepを使って出力を取得したいのですが。
最初の数字の桁数は異なる可能性があるため(他の行が最初の数字になる可能性があるため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