grepは正確にX文字を含む行/ファイルを探します。

grepは正確にX文字を含む行/ファイルを探します。

これは私が実行したコマンドの結果ですgrep

[user@localhost] : ~/Documents/challenge $ grep -i -e ".\{32\}" fileA fileB
fileA:W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl
fileB:observacion = new Observacion();
fileB:observacion.setCodigoOf(ordenBO.getCodigo());
fileB:observacion.setDetalle(of.getObservacion().getSolicitante());
fileB:observacion.setTipoObservacion(TipoObservacionOrdenFleteMaestro.SOLICITANTE);
fileB:observacion.setProceso(TipoProcesoObservacionMaestro.MODIFICACION);
fileB:observacion.setFecha(Utiles.getFechaSistema());
fileB:java.util.Date fechaHora = Calendar.getInstance().getTime();
fileB:observacion.setUsuarioCrecion(usuarioSesionado.getUsuario().getUsuario());
fileB:daoObservacion.agregaObservacion(observacion);

fileA両方のファイルで32文字の文字列を探していますfileB。重要なのは、fileA改行なしで32文字しか利用できないことです。

[user@localhost] : ~/Documents/challenge $ hexdump -C fileA
00000000  57 30 6d 4d 68 55 63 52  52 6e 47 38 64 63 67 68  |W0mMhUcRRnG8dcgh|
00000010  45 34 71 76 6b 33 4a 41  39 6c 47 74 38 6e 44 6c  |E4qvk3JA9lGt8nDl|
00000020

私のコマンドの問題は、grep32文字を超えるすべての行を返すことです。どうすれば戻ってきますか?32文字のみを含む行。私にとって問題は、改行文字がないため、改行文字と一致するように正規表現を変更できないことです。

私の予想結果は次のとおりです。

fileA:W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl

(注:これは私が見苦しい解決策で解決した問題ですが、この場合はgrepパイプのみを使用するか、出力リダイレクトは許可されません。)

ベストアンサー1

これはうまくいきます。 ^行の先頭と{32}既に持っている内容を加えて、$行の終わりを示します。

$ cat fileA fileB
12345678901234567890123456789012
123456789012345678901234567890123
12345678901234567890123456789012
123456789012345678901234567890124
$ grep -E "^.{32}$" fileA fileB
fileA:12345678901234567890123456789012
fileB:12345678901234567890123456789012
$

@steeldriverが指摘したように、posix grepには-xが含まれているので、次のことも機能します。grep -xE ".{32}" fileA fileB

おすすめ記事