ファイル内の特定の長さを超える行を識別するにはどうすればいいですか

ファイル内の特定の長さを超える行を識別するにはどうすればいいですか

コード内で特定の長さを超える行を見つけたいのですが、コードは複数のファイルに分かれています。これを行うにはどのような方法が良いでしょうか?

ファイルと行番号を知りたいのですが、内容がわかると望ましいですが、必須ではありません。この演習の目的は、行を分割する方法 (おそらく手動で) を見つけることです。

答え1

grep

grep -En '.{12}' file

行の長さは少なくとも 12 文字です。

複数のファイルの場合:

find . -type f -exec grep -En '.{12}' {} +

grepGNU のような一部の実装ではgrep、ファイルの検索自体を行うことができます。

grep -rEn '.{12}' .

ただし、シンボリックリンクやその他の非正規のファイルには注意してください。

答え2

AWKソリューション

awk '{       
if (length($0) > 5)
        print $0;'} yourfile

あるいは、もっと簡潔に言うと:

awk 'length > 5' file

答え3

Bashソリューション

#!/bin/bash

count=0

while read; do
    ((++count)) 
    len=${#REPLY}
    if ((len > 80)); then
        echo "Line $count is $len characters."
    fi
done

つまり、例えば、 です./whatever.sh < input.file。 から 1 を引くことで改行が含まれなくなります$len。これが望ましくない場合、または入力で CRLF 終了が使用されている場合は、それに応じて調整する必要があります。

答え4

たとえばperl、80 文字を超える行を検索するとします。

線を表示するには:

$ perl -nle 'print if length > 80' your_file

行番号を表示するには:

$ perl -nle 'print "$.\n" if length > 80' your_file

または両方:

$ perl -nle 'print "[$.]:  $_\n" if length > 80' your_file

関連情報