私はというラインを持っています
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