Bash skript pro vyhledávání řetězce v blízkosti další řetězec ve vim (?)

0

Otázka

Hledám (bash) příkaz k otevření souboru (jako ve vimu), hledat pro konkrétní řetězec a hledání pozpátku od tam, najít druhý řetězec a na výstup (pouze), že druhý řetězec. Pro soubor, jako je tento:

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

Vymyslel jsem to tak daleko: vim -c "/bbb" -c "n" -c "?aaa" -c "n"

To nebude fungovat; vim zní:

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

Také musím uložit řetězec aaa y do souboru/proměnná ... nemůžu přijít na to jak.

TIA

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

Na adresu své hlavní otázka... příkazy provedeny v -c parametry jsou Ex příkazy, není normální režim příkazů. To jen tak se stane, že :/ a :? jsou platné Ex příkazy a práce nejasně , jako jejich normální režim protějšky / a ?, ale :n je zkratka pro :help :next:

Edit [count] next file.

což je velmi odlišné od normálního režimu :help n.


Ale proč to děláte ve Vimu? To se nezdá vhodné.

2021-11-23 10:38:49
0

Jako jiní říkali, vim nemusí být nejlepší nástroj pro to, co chcete dosáhnout.

Můžete zkusit :

#!/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

V jiných jazycích

Tato stránka je v jiných jazycích

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