grepを使う

grepを使う

次の行を考えてみましょう。

842567831752rajfkglxfgk  kerigjeiofjgoe jergjerio4523789573489

genfjkgnerijio 234578934897 jgioefjgio  shfhuwehjdfu7890345289103

Linuxの上の行で789次の4桁を取得する方法

ベストアンサー1

grepを使う

grep -Po '(?<=789).{4}'

説明する

  • grep -P:Perlモードでgrepを使用する
  • -o:一致する部分のみを返す
  • (?<=789):後ろを振り返ってください。これは「一致」セクションの前に表示する必要があります。
  • .{4}:4文字と一致します(lookbehind以降)。これが返される内容です。

またはsedを使用してください

sed -r 's/.*789(.{4}).*/\1/'

789これはキューに1つしかないと仮定します。

説明する

  • sed -r:読みやすくするには、拡張正規表現モードでsedを使用してください。
  • s/foo/bar/:使用foo。 。 。交換bar
  • .*789(.{4}).*:行の先頭に一致し、.*4789つの文字を一致させ、(.{4})両方の文字をキャプチャしてから、()行の残りの部分をキャプチャします.*。これはライン全体と正確に一致します。
  • \1: 行全体を上から一致する最初のパターンに置き換えます。

またはawkを使用してください

awk '{if (match($0,/789(.{4})/,m)) print m[1]}'

789これはキューに1つしかないと仮定します。 awkではこれを行う方法は6つあります。

説明する

  • match($0,/789(.{4})/,m):行全体で$0正規表現を見つけ、789(.{4})次の4文字をキャプチャします789
  • print m[1]:最初のキャプチャグループを印刷します。

ちょうど数字

数字のみを取得するには、次のように使用できます。

grep -Po '(?<=789).*' | sed -r 's/^[^0-9]*([0-9])[^0-9]*([0-9])[^0-9]*([0-9])[^0-9]*([0-9]).*/\1\2\3\4/'

この戦略は以下を想定しています。はい最後の4桁789

説明する

  • grep -Po '(?<=789).*':上記と似ていますが、出力みんな789.
  • | sed -r 's/foo/bar/':拡張正規表現パターンを使用してsedにパイプし、foo`barに置き換えます。
  • ^[^0-9]*([0-9])[^0-9]*([0-9])[^0-9]*([0-9])[^0-9]*([0-9]).*:行の先頭^と数字以外のすべての文字を一致させ、[^0-9]*数字をキャプチャします([0-9])。これをさらに3回繰り返し、残りの行を一致させます.*
  • \1\2\3\4:行全体、つまり次の4桁をキャプチャグループに置き換えます。

(またはPerlのnon-greedy正規表現を使用してsed式を単純化できます。perl -pe 's/.*?([0-9]).*?([0-9]).*?([0-9]).*?([0-9]).*/\1\2\3\4/'

おすすめ記事