Как инвертировать порядок разделов многострочного текста, разделенных пустыми новыми строками/разрывами строки?

Как инвертировать порядок разделов многострочного текста, разделенных пустыми новыми строками/разрывами строки...

..., с простой командой или приложением, предпочтительно без программирования?

Я не хочу вид, но обратный порядок текста разделяет только.

Например:

A
B

0
1

X
YX
Y

HTTP
FTP

становится

HTTP
FTP

X
YX
Y

0
1

A
B
2
задан 14.08.2011, 13:36

3 ответа

tac принимает разделитель, таким образом, в, например. bash можно сделать:

tac -s $'\n\n' foo

который произведет немного неправильный вывод, потому что последний абзац не завершается двойной новой строкой. Так,

(cat foo; echo) | tac -s $'\n\n' | sed '$d'

вероятно, что Вы хотели бы. (Содержание канала foo и новая строка через tac, затем sed разделять последнюю строку.)

Примечание: Не перенаправляйте это в > foo снова, поскольку Вы могли закончить с пустым файлом.

3
ответ дан 08.12.2019, 05:28

Хотя автор не предпочитает программировать решения, использование Python было бы довольно легко в 1 строке:

open('output.txt', 'w').write('\n\n'.join(reversed(open('input.txt', 'r').read().split('\n\n'))))

Очевидно, замена input.txt и output.txt с желаемыми файлами и изменением \n кому: \r\n для файлов форматированного текста Windows.

Поместите это в a .py файл и вызов это через python myscript.py.

2
ответ дан 08.12.2019, 05:28

При использовании 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

Вероятно, не самый изящный путь, но это сделало задание с Вашим тестовым сценарием.

1
ответ дан 08.12.2019, 05:28

Теги

Похожие вопросы