cutを使用せずに行の最初のパターンマッチを取得する

cutを使用せずに行の最初のパターンマッチを取得する

次のようなテキストがたくさんあります(テストとデータをできるだけ単純にするため)。

first 1 is the real 2 time the word matched 3 
appeared on the previous line but is 4 the fourth.
Every line can have more numbers 5 because numbers 6 are everywhere
I need to extract the number just after the word 7 that precedes 8

grep単語の後に続く最初の数字を抽出するためにテストされているコマンドは次のとおりです。

grep -Eoi ' [0-9]{1}'

出力は次のとおりです

 1
 2
 3
 4
 5
 6
 7
 8

希望の出力は次のとおりです。

 1
 4
 5
 7

cutまたは使用は許可されていませんawk

ベストアンサー1

私はこれがgrepを習得する練習だと思います。純粋なgrepソリューションは次のとおりです。

一行で:

echo "first 1 is the real 2 time the word matched 3 " |grep -Eo '[0-9]' |grep -m1 -E '[0-9]'

残念なことに、最初はgrepを使用してもgrep -m1望ましい結果が得られませんでした。

複数行を含むファイルではループを使用する必要があります。

while read -r line; do
grep -Eo '[0-9]' <<<"$line" |grep -m1 -E '[0-9]'
done < file.txt

またはコマンドラインから:

while read -r line; do grep -Eo '[0-9]' <<<"$line" |grep -m1 -E '[0-9]';done < a.txt

出力は予想通りです。

おすすめ記事