次の行を考えてみましょう。
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/'
)