Скрипт Bash для поиска строки рядом с другой строкой в vim (?)

0

Вопрос

Я ищу команду (bash) для открытия файла (например, в vim), поиска определенной строки и поиска в обратном направлении оттуда, чтобы найти вторую строку и вывести (только) эту вторую строку. Для такого файла, как этот:

...
aaa x
...
aaa y
...       <-- any number of lines, but necessarily greater than 0
bbb
...

Я уже придумал это до сих пор: vim -c "/bbb" -c "n" -c "?aaa" -c "n"

Это не работает; vim читает:

Error detected while processing command line:
E163: There is only one file to edit
Press ENTER or type command to continue

Мне также нужно сохранить строку aaa y в файл/переменную-я не могу понять, как это сделать.

ТИА

bash vim
2021-11-23 10:00:41
2
0

Чтобы ответить на ваш главный вопрос… команды, выполняемые в -c параметры-это команды Ex, а не команды обычного режима. Просто так получилось, что :/ и :? являются действительными командами Ex и работают примерно так же, как их аналоги в обычном режиме / и ?, но :n является сокращением для :help :next:

Edit [count] next file.

который сильно отличается от обычного режима :help n.


Но для начала, почему вы делаете это в Vim? Это кажется неуместным.

2021-11-23 10:38:49
0

Как говорили другие, vim возможно, это не лучший инструмент для того, чего вы хотите достичь.

Вы можете попробовать :

#!/bin/bash

expect <<EOF
spawn vim input-file
send ":1\r/bbb\rn\r?aaa\r:.+1,\$ d\r:1,.-1d\r:w! output-file\r"
sleep 1
EOF
2021-11-23 12:58:20

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................