shell - Unix:打印文件夹中每个文件的文件名和每行超过80个字符的行号

标签 shell unix scripting

标题概括了一切。我在 Unix、korn shell 中工作。我正在尝试打印当前文件夹中每个文件超过 80 个字符的每行的文件名和行号。

我可以使用“awk 'length > 80' *.cpp”来给出长度超过 80 个字符的所有行,但我似乎无法提取行号或文件名。我也尝试使用 cat,因为它允许行号。

这个想法是获得与此类似的输出:

test.cpp line 36
    std::cout << ... line that is over 80 characters

test2.cpp line 40
    Another line that is over 80 characters

任何帮助都会很棒。

最佳答案

快到了!这将为您提供 grep 样式的输出,这在 Vim 等编辑器中很有用,可以导航输出:

awk 'length > 80 {print FILENAME "(" FNR "): " $0}' *.cpp

或者给出您要求的格式:

awk 'length > 80 {print FILENAME " line " FNR "\n\t" $0}' *.cpp

FILENAMEFNR(类似于 NR,但针对特定文件)是 awk 中的特殊变量。

当然,您也可以使用 grep 本身:

grep -n '^.\{80\}' *.cpp

关于shell - Unix:打印文件夹中每个文件的文件名和每行超过80个字符的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5408670/

相关文章:

regex - 如何在 perl 正则表达式中跨换行符匹配?

linux - 64 位 Linux 上的缓冲区溢出

unix - 如何进行批量重命名?

bash - 我如何使用时间戳进行 grep 计数

c - 如果路径错误,则 execvp() 返回值

bash - 当子脚本之一失败时不退出 bash 脚本

c# - System.IO.Path 或与 Unix 路径等效使用

python - 奇怪的 os.chmod 行为

linux - 从右边提取两个/之间的字符串

bash - 错误处理将一切都视为错误