web-dev-qa-db-ja.com

最後のパターン文字を検索して見つけ、次の文字を印刷する

私は次のファイルを持っていますC1.log

/u01/app/Oracle/dirdat/ab00cmf
/u01/app/Oracle/dirprm/fm00lsk

すべての行の最後の/を見つけて、次の2文字を印刷する必要があります。

たとえば、私の出力は次のようになります。

ab
fm
2
Moses

[〜#〜] pcre [〜#〜] をサポートするgrepを使用:

grep -oP '.*/\K.{0,2}' infile
  • この\Kアサーションは、それ自体の前に一致したすべてのものを無視するために使用されます
  • .{0,2}は、最後の/の後のゼロまたは最大2文字に一致します

以下の入力の場合:

/u01/app/Oracle/dirprm/fm00lsk
/foo/x/ab00cmf
/foo/bar/x
/foo/somthing/

出力は次のようになります。

fm
ab
x
7
αғsнιη

awkの使用:

awk -F/ '{print substr($NF,1,2)}' C1.log

これは/をフィールド区切り文字として使用し、最後のフィールドから文字1から始まる2文字を出力します。

6
jesse_b

sed貪欲なマッチングと後方参照の使用:

$ sed -E 's/(^.*\/)(..)(.*$)/\2/' C1.log
ab
fm
$
3
fpmurphy