CLI-Tool zur grafischen Auswahl von Linien während übergebenen Befehlen

349
Orangenhain

Gibt es ein ähnliches Werkzeug , das ich auswählen kann, um es in eine Befehlskette einzufügen, mit der ich (mehrere) Zeilen für den nächsten Schritt auswählen kann?

choose Leider "gibt" die von Ihnen gewählte Zeile nicht weiter. Wenn Sie einen Befehl ausführen, wählen Sie eine Zeile aus und versuchen Sie, etwas damit zu tun. Sie erhalten Folgendes:

% echo "a\tb\ncde\tf" | choose | wc cde f 0 0 0 
0
Es gibt auch eine vollständig Shell-basierte Lösung für dieses Problem (derzeit auch nur einzeilige Auswahl): [Sentaku] (https://github.com/rcmdnk/sentaku) Orangenhain vor 10 Jahren 0

2 Antworten auf die Frage

1
jjlin

Es ist Open Source, und die Grundlogik ist nicht sehr kompliziert. Sie können sie also einfach ändern.

Fügen Sie die folgenden Zeilen in eine Datei (etwa choose.diff) in demselben Verzeichnis ein choose, und führen Sie sie aus patch -p1 < choose.diff:

--- a/choose +++ b/choose @@ -164,8 +164,8 @@ def do_it(auswahl): index = select_entry(auswahl, header_text=u'Navigate by pressing ↑ and ↓, select by pressing Enter')  - # print chosen string - print(orig_auswahl[index]) + # return chosen string + return orig_auswahl[index]   if __name__=="__main__": @@ -179,7 +179,7 @@ if __name__=="__main__": sys.__stdin__ = sys.stdin = open('/dev/tty') os.dup2(sys.stdin.fileno(), 0)  - do_it(auswahl) + choice = do_it(auswahl)  #restore old stdout sys.stdout.flush() @@ -190,3 +190,5 @@ if __name__=="__main__": sys.__stdout__ = sys.stdout = old_out sys.__stdin__ = sys.stdin = old_in sys.__stderr__ = sys.stderr = old_err + + print choice 
Vielen Dank! Und durch die Kombination mit dem Beispielcode [`browse.py`] (https://github.com/wardi/urwid/blob/master/examples/browse.py) im urwid-Repository konnte ich auch multi bekommen -wählen. Orangenhain vor 10 Jahren 0
0
nemesisfixx

Nicht sicher, ob dies für Sie passt, aber wenn es darum geht, Zeilen aus einem Textstrom auszuwählen, sedsollten Sie sich immer darum kümmern . Überprüfen Sie die Beispiele unten:

Ich möchte nur die Zeilen ausgeben, die nicht mit einem bestimmten regulären Ausdruck (Regex) übereinstimmen. In diesem Beispiel lassen Sie alle Zeilen weg, die das Wort "pipe" enthalten.

$> echo -e "this is a line\nthat is a line\nthis is a piped line\nthat is a line in a pipe" | sed '/pipe/d' this is a line that is a line 

In der nächsten Zeile werden nur die Zeilen ausgegeben, die das Wort "Pipe" enthalten.

$> echo -e "this is a line\nthat is a line\nthis is a piped line\nthat is a line in a pipe" | sed '/pipe/!d' this is a piped line that is a line in a pipe 

Alternativ können Sie nur die 2. und 3. Zeile ausgeben:

$> echo -e "this is a line\nthat is a line\nthis is a piped line\nthat is a line in a pipe" | sed -n '2,3p' that is a line this is a piped line 

Und viele weitere Beispiele und Möglichkeiten ... Schauen Sie sich sed1line an

Auf jeden Fall gibt es viele mehr in der Lage Alternativen auch awk, perlusw