我想在不使用tac
命令的情况下向后打印文件中的行。还有其他解决方案可以用 bash 做这样的事情吗?
答案1
使用sed
来模拟tac
:
sed '1!G;h;$!d' "${inputfile}"
答案2
答案3
awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' file.txt
通过awk 一行行
答案4
正如您要求在 bash 中执行此操作,这里有一个不使用 awk、sed 或 perl 的解决方案,仅使用 bash 函数:
reverse ()
{
local line
if IFS= read -r line
then
reverse
printf '%s\n' "$line"
fi
}
的输出
echo 'a
b
c
d
' | reverse
是
d
c
b
a
正如预期的那样。
但请注意,行存储在内存中,每个递归调用的函数实例中都有一行。处理大文件时要小心。