我需要查看一堆文本文件的最后一个字符(或者测试它们是否为“}”并给出一个测试为负数的文件列表)。有没有一种简单的方法可以从命令行执行此操作。
(理想情况下,解决方案无需从头开始阅读整个文件,因为除了有很多文件外,它们也可能非常大。
P.S。:任何答案都会很棒,但如果答案中的所有内容的功能和语法都能得到充分解释,我将非常感激。
答案 0 :(得分:1)
使用tail
可以非常轻松地完成,然后在bash中进行字符串索引。例如,您使用tail -n1 file
获取文件中的最后一行。您需要使用 command-substitution 将行存储在变量中,例如
lastln=$(tail -n1 file)
然后,只需索引最后一个字符,例如
echo ${lastln:(-1)}
(注意:)从字符串末尾开始编制索引时,必须将偏移量(例如-1
放在括号(-1)
中 - 或 - 您必须保留空格之前 -1
,例如echo ${lastln: -1}
也有效。)
答案 1 :(得分:1)
你可以试试这个:
for file in file1 file2; do tail -n 1 "$file" | grep -q '}$' || echo "$file"; done
您应该将file1 file2
替换为您要分析的文件列表,例如*
等。现在发生了什么?外部
for file in file1 file2; do ...; done
是一个简单的循环文件,在循环内部,您可以将当前文件称为$ file。然后,
tail -n 1 "$file"
打印给定文件的最后一行和
| grep -q '}$'
将输出重定向到grep(变为带-q
的静音模式),它立即查找'}'后跟行尾($)。此命令的返回值可用于链接另一个操作:当grep返回非零(表示失败,即模式不匹配)时,最后一部分
|| echo "$file"
执行,产生您需要的文件列表。