如何反转由空白换行符/换行符分隔的多行文本部分的顺序......
...,使用一个简单的命令或应用程序,最好不需要编程?
我不想要排序,而只是要按文本部分的相反顺序排列。
例如:
A
B
0
1
X
YX
Y
HTTP
FTP
变成
HTTP
FTP
X
YX
Y
0
1
A
B
答案1
tac
接受分隔符,因此例如bash
您可以执行以下操作:
tac -s $'\n\n' foo
这将产生稍微不正确的输出,因为最后一段不是以双换行符结束的。因此,
(cat foo; echo) | tac -s $'\n\n' | sed '$d'
可能就是您想要的。(将 的内容foo
和换行符通过传输tac
,然后sed
删除最后一行。)
笔记:请勿> foo
再次重定向此文件,否则最终可能会得到一个空文件。
答案2
尽管作者不喜欢编程解决方案,但使用 Python 只需一行即可轻松实现:
open('output.txt', 'w').write('\n\n'.join(reversed(open('input.txt', 'r').read().split('\n\n'))))
显然,用所需的文件替换input.txt
和,并将Windows 格式的文本文件更改为。output.txt
\n
\r\n
将其放入.py
文件中并通过 调用它python myscript.py
。
答案3
如果您使用的是 Windows,那么您可以简单地使用 Powershell。这将反转内容test.txt
并将结果保存到test2.txt
:
$f=Get-Content c:\folder\test.txt
[array]::Reverse($f)
$f | out-file c:\folder\test2.txt
更新:
这应该可以解决问题(读取所有行test.txt
并重新排列它们以test2.txt
按照您想要的方式归档):
$content = [System.IO.File]::ReadAllLines("C:\Folder\test.txt")
$a = New-Object System.Collections.ArrayList
$i=0
ForEach ($line in $content) {If ($line -ne "") {$a.insert($i++, $line)} else {$a.insert(0, $line); $i=0}}
$a | out-file C:\Folder\test2.txt
这可能不是最优雅的方式,但它确实完成了您的测试用例。