GNU/Linux >> Znalost Linux >  >> Linux

Před předáním do stdout ručně vyberte/zrušte výběr řádků

I když se mi líbí vipe přístup, našel jsem ještě chladnější způsob:fzf.

cat people.txt | grep -v "^#" | grep "^.*Fruit.*Folk" | fzf -m | cat

...poskytuje pěkný seznam, kde mohu vyhledávat a přepínat položky pomocí klávesnice, a když skončím, úplně zmizí.


moreutils má vipe , který pouze spouští váš běžný textový editor (vi nebo tak něco) jako součást potrubí. Všechny řádky, které neodstraníte, budou zapsány zpět do stdout. (Obecně však stejný výsledek získáte přesměrováním na dočasný soubor a úpravou tohoto souboru.)


Můžete také použít gvim (a vim ) pro tohle. Vložte gvim /dev/stdin do vaší roury a zapište pomocí :wq! /dev/stdout až dokončíte úpravy.

Volání gvim následujícím způsobem vám umožní přirozeněji psát a zavírat pomocí ZZ :

gvim +'nmap ZZ :wq!<cr> | r /dev/stdin | 1d | file /dev/stdout'

Můžete vytvořit alias nebo funkci toho:

gvimp() {
  gvim +'
    nmap ZZ :wq!<cr>
    r /dev/stdin
    1d
    file /dev/stdout
  '
}

Zde je příklad, kdy jsem smazal řádky 4-7 a dokončil to provedením ZZ v normálním režimu:

$ seq 1 10 | gvimp | sed -r 's/^|$/=/g'
=1=
=2=
=3=
=8=
=9=
=10=

EDIT:Běžný vim je trochu složitější, protože používá stdin pro vstup z klávesnice a stdout pro kreslení uživatelského rozhraní. Stále jej však můžete používat přidáním dalšího procesu. Přesměrujete std* vim na terminál a pro datový kanál použijete std* nadřazeného procesu.

vimp() {
  bash -c '
    terminal="/dev/$(ps -o tty= $$)"
    tmp_out="$(mktemp)"
    trap "rm \$tmp_out" EXIT
    vim <(cat) < "$terminal" &> "$terminal" +"
      file $tmp_out
      set noreadonly
      nmap ZZ :wq!<cr>
    "
    cat "$tmp_out"
  '
}

Dočasný soubor je nutný, protože jinak se výstup roury smísí s uživatelským rozhraním vim a může zmizet s ním, když vim skončí.


Linux
  1. Kočičí čára X do čáry Y na obrovském souboru?

  2. Vyberte řádky z textového souboru, jejichž ID jsou uvedena v jiném souboru?

  3. Proč se v Linuxu používá select

  1. Jak vybrat více řádků ze souboru nebo z potrubí ve skriptu?

  2. Log rotace stdout?

  3. Změňte pořadí řádků v souboru

  1. Jak přesměrovat výstup do souboru a Stdout v Linuxu

  2. Příkaz pro výstup obsahu souboru do Stdout?

  3. Awk z různých řádků?