回显Unix / Bash中文本文件的最后一个字符

时间:2018-06-15 07:27:24

标签: bash unix

我需要查看一堆文本文件的最后一个字符(或者测试它们是否为“}”并给出一个测试为负数的文件列表)。有没有一种简单的方法可以从命令行执行此操作。

(理想情况下,解决方案无需从头开始阅读整个文件,因为除了有很多文件外,它们也可能非常大。

P.S。:任何答案都会很棒,但如果答案中的所有内容的功能和语法都能得到充分解释,我将非常感激。

2 个答案:

答案 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"
执行

,产生您需要的文件列表。