Joh*_*web 43
使用sed效仿tac:
sed '1!G;h;$!d' "${inputfile}"
Run Code Online (Sandbox Code Playgroud)
don*_*sti 11
与ed:
ed -s infile <<IN
g/^/m0
,p
q
IN
Run Code Online (Sandbox Code Playgroud)
如果你在BSD/ OSX(希望很快也在GNU/ 上linux,因为它将是 POSIX):
tail -r infile
Run Code Online (Sandbox Code Playgroud)
当您要求在 bash 中执行此操作时,这里有一个不使用 awk、sed 或 perl 的解决方案,只是一个 bash 函数:
reverse ()
{
local line
if IFS= read -r line
then
reverse
printf '%s\n' "$line"
fi
}
Run Code Online (Sandbox Code Playgroud)
的输出
echo 'a
b
c
d
' | reverse
Run Code Online (Sandbox Code Playgroud)
是
d
c
b
a
Run Code Online (Sandbox Code Playgroud)
正如预期的那样。
但请注意,行存储在内存中,每个递归调用的函数实例中都有一行。所以对大文件要小心。
小智 5
你可以通过管道:
awk '{print NR" "$0}' | sort -k1 -n -r | sed 's/^[^ ]* //g'
Run Code Online (Sandbox Code Playgroud)
awk每一行的前缀为行号,后跟一个空格。通过以sort相反的数字样式对第一个字段(行号)进行排序来反转行的顺序。并sed剥离行号。
以下示例显示了这一点:
pax$ echo 'a
b
c
d
e
f
g
h
i
j
k
l' | awk '{print NR" "$0}' | sort -k1 -n -r | sed 's/^[^ ]* //g'
Run Code Online (Sandbox Code Playgroud)
它输出:
l
k
j
i
h
g
f
e
d
c
b
a
Run Code Online (Sandbox Code Playgroud)