在命令行显示多个文件的单行

时间:2013-04-16 17:54:29

标签: shell

我的问题如下:由于LaTeX的精彩,我经常会遇到行号错误,但没有指出哪个文件被引用:

l.127 \end{table}

是否有一个命令允许我只看到输出行127,例如,对于多个文件(理想情况下是通配符)。

这可能很容易用Python或类似的方式编写,我只是想知道是否有一种简单的方法来使用常见的shell命令。

注意:使用单个文件执行此操作的简单方法是(如下所述)

head -n 127 filename | tail -n 1

但是多个文件失败了。

好的,刚刚意识到bash循环是一个选项:

for i in `ls $1`;
   do echo $i; head -n $2 $1 | tail -n 1;
done;

用语法

执行
source lineno.sh 127 filenames

2 个答案:

答案 0 :(得分:1)

还有awk:

awk 'FNR==127 {print FILENAME ":" $0; nextfile}' *.tex

答案 1 :(得分:1)

像这样采购shell脚本看起来很有趣。使其可执行并运行它:

lineno.sh 127 filenames

当我将这些命令放在.sh目录中时删除$HOME/bin,这样我就可以运行:

lineno 127 filenames

脚本不是最佳的;你应该避免像这样使用ls(如果它们中的任何一个包含空格或其他特殊字符,它会对你的文件名感到沮丧)。

#!/bin/sh
line=${1:?}  # Complains if there is no $1 or if it is an empty string
shift
for file in "$@"
do
    echo "$file";
    head -n $line "$file" | tail -n 1
done

我可能会加强参数检查(报告正确的用法,坚持至少第二个参数),但它会合理地工作。