
コード内で特定の長さを超える行を見つけたいのですが、コードは複数のファイルに分かれています。これを行うにはどのような方法が良いでしょうか?
ファイルと行番号を知りたいのですが、内容がわかると望ましいですが、必須ではありません。この演習の目的は、行を分割する方法 (おそらく手動で) を見つけることです。
答え1
とgrep
:
grep -En '.{12}' file
行の長さは少なくとも 12 文字です。
複数のファイルの場合:
find . -type f -exec grep -En '.{12}' {} +
grep
GNU のような一部の実装では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