Bash

使用 fzf 從樹中獲取欄位

  • October 20, 2022

我試過這樣的東西

tree -C | fzf --ansi | awk -F'|' '{print $NF}'
├── repo.git/
│   ├── folder/
│   │   ├── subfolder/
│   │   │   ├── output.0
│   │   │   └── traces.1
│   │   ├── subfolder/
│   │   │   └── fold/
│   │   │       └── subtree/
│   │   │           ├── .gitignore
│   │   │           ├── stamp-h1 item
│   │   │           └── stamp-h2

我想搶stamp-h1 item,換句話說就是文件名

如果您真的必須使用,tree那麼您應該使用tree -CQQ引號將文件名引號括起來。

所以的輸出會變成:

└── "repo.git"
   └── "folder"
       ├── "subfolder"
       │   ├── "output.0"
       │   └── "traces.1"
       └── "subfolder2"
           └── "fold"
               └── "subtree"
                   ├── "stamp-h1 item"
                   └── "stamp-h2"

對於獲取文件名,您可以應用正則表達式,sed用於僅獲取" ". 所以你的程式碼應該是這樣的:

tree -CQ | fzf --ansi | sed 's/.*\"\(.*\)\"/\1/g'

使用上面的程式碼,如果您選擇repo.git,您將獲得:

repo.git

如果您選擇“stamp-h1 item”,您將獲得:

stamp-h1 item

或者如果你想列印"你應該使用的值:

tree -CQ | fzf --ansi | sed 's/.*\"\(.*\)\"/"\1"/g'
#Example output:
"stamp-h1 item"

引用自:https://unix.stackexchange.com/questions/721800