如果一个Unix/Linux命令从标准输入接受其输入数据并在标准输出上生成其输出(结果),则称之为过滤器。
最简单的过滤器是cat
。它只是将stdin复制到stdout而没有任何修改。
如何在bash中实现cat
?(不考虑命令行参数的情况)
我想到了以下方法:
#! /bin/bash
while IFS="" read -r line
do
echo -E "$line"
done
在大多数情况下,这似乎是可行的,即使文本文件包含一些二进制字节,只要它们不是空字节。但是,如果最后一行不以换行符结尾,则会缺少输出结果中的该行。
如何解决这个问题?
我几乎可以确定这个问题以前已经被回答过了,但是我的搜索技巧似乎不够好。
显然,我不想在bash中重新实现cat
:无论如何都行不通,因为存在空字节问题。但是,我想扩展基本循环以对文本文件的某些行进行自定义处理。然而,我们已经看到过没有最终换行符的文本文件,因此我希望能够处理这种情况。
sed
和awk
),而不是尝试在 bash 中实现类似的东西。 - larsksawk
解决问题。然而,我需要进行的自定义处理相当复杂,使用 bash 脚本更容易维护。 - Uwe Geuderwhile IFS= read -r line || [[ -n $line ]]; do printf '%s\n' "$line" done
来处理没有换行符的最后一行。 - anubhava