如何识别文件中超过一定长度的行

Mar*_*cin 13 text-processing

我想在我的代码中找到超过一定长度的行。我的代码在多个文件中。有什么好方法可以做到这一点?

我想知道文件和行号;内容将是首选,但不是必需的。练习的目的是弄清楚如何断线(可能是手动)。

Sté*_*las 14

grep

grep -En '.{12}' file
Run Code Online (Sandbox Code Playgroud)

对于至少 12 个字符长的行。

有几个文件:

find . -type f -exec grep -En '.{12}' {} +
Run Code Online (Sandbox Code Playgroud)

一些grep实现,如 GNU grep,可以自己进行文件查找。

grep -rEn '.{12}' .
Run Code Online (Sandbox Code Playgroud)

但要注意符号链接和其他非常规文件。


Ram*_*esh 12

AWK解决方案

awk '{       
if (length($0) > 5)
        print $0;'} yourfile
Run Code Online (Sandbox Code Playgroud)

或者,更简洁地说:

awk 'length > 5' file
Run Code Online (Sandbox Code Playgroud)

  • 我们可以缩短您的版本`awk'length > 5'` (9认同)
  • 使用 GNU `awk` 有点不优雅但简洁的 `awk'/^.{6,}/'` (3认同)
  • @1_CR,那是 POSIX,可以缩写为 `awk '/.{6}/'`(实际上,直到最近,GNU awk 一直是一种除非您将 POSIXLY_CORRECT 传递到其环境中否则无法工作的地方)。 (3认同)

gol*_*cks 5

Bash解决方案

#!/bin/bash

count=0

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

所以,例如,./whatever.sh < input.file。这不包括从 中减去 1 的换行符$len;如果这是不可取的,或者您的输入使用 CRLF 结尾,您应该相应地进行调整。

  • @1_CR 实际上如果你不给 `read` 一个名字来读入,它会读入 `REPLY` 并包含所有空格。不需要“IFS”设置。 (2认同)
  • 这将非常慢并且特别处理反斜杠字符。`while read` 循环来处理文本是非常糟糕的做法。 (2认同)

iru*_*var 5

因为缺少的一件事是sed解决方案

sed -n '/^.\{6,\}/p' file
Run Code Online (Sandbox Code Playgroud)