Есть ли инструмент, подобный для выбора, который я могу подключить к цепочке команд, которая позволит мне выбрать (несколько) строк для следующего шага?

choose к сожалению, команда "не передает" выбранную строку, вместо этого, если вы выполняете команду, выберите строку и попытайтесь что-то с ней сделать, что вы получите:

% echo "a\tb\ncde\tf" | choose | wc
cde      f
       0       0       0

2 ответа2

1

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

Поместите следующие строки в файл (например, choose.diff в том же каталоге, что choose а затем запустить 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
0

Не уверен, что это вас устраивает, но если речь идет о выделении строк из потока текста, sed всегда должен вас отсортировать. Проверьте примеры ниже:

Я хочу вывести только те строки, которые не соответствуют определенному регулярному выражению (регулярное выражение) - в этом примере опустите все строки, содержащие слово "pipe".

$> 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

В следующем выводите только те строки, которые содержат слово "труба"

$> 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

В качестве альтернативы выведите только 2-ю и 3-ю строки:

$> 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

И еще много примеров и возможностей ... Проверьте sed1line

Определенно, есть много более способных альтернатив, awk , perl и т.д.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .