Answers:
一个穷人正在sponge
使用awk
:
awk '{a[NR] = $0} END {for (i = 1; i <= NR; i++) print a[i]}'
如果您有tac
,也可以滥用它:
... | tac | tac
tac
我认为这是简单而优雅的。
| tac | tac
很简单,但是请记住,它对于任务效率非常低,并且会降低性能,特别是对于较大的文件。
您可以sponge
通过moreutils来实现。sponge
将“吸收标准输入并写入文件”。没有参数,该文件是标准输出。给出给该命令的输入将存储在内存中直到EOF,然后立即全部写入。
要写入普通文件,您只需提供文件名:
cmd | sponge filename
的主要目的sponge
是允许在管道中读取和写入同一文件,但是它也可以满足您的需求。
该sed
解决方案比DigitalTrauma的解决方案长一点,但也适用于NUL字节。
sed -n 'H;${x;s/^\n//;p}'
sed ':l;N;bl'
应该也可以。
您所要求的行为,这不是简单猫的默认行为吗?
gv@debian:$ cat << EOF #or cat <<EOF >file or cat <<EOF >/dev/stdout
> Line 1
> Line 2
> Line 3
> EOF
Line 1
Line 2
Line 3
gv@debian:$
cat
(Enter)Line 1
(Enter),看看会发生什么。
除了在Python中,与muru的awk示例相同的想法。使用CtrlD停止读取线
$ python -c 'import sys;print("".join(sys.stdin.readlines()))'
line1
line2
line3 # press Enter and Ctrl+D at this point
line1
line2
line3
perl -e 'print <>'
(!)
sort
用于此目的。显然,它具有一些不良后果。