簡體   English   中英

提取兩行之間的文本

[英]Extract text between two lines

我正在構建一個bash figlet以使用figlist可視化供figlet使用的各種字體。

figlist提供如下輸出:

Default font: standard
Font directory: /usr/local/Cellar/figlet/2.2.5/share/figlet/fonts
Figlet fonts in this directory:
3-d
3x5
5lineoblique
[...]
twopoint
univers
usaflag
weird
whimsy
Figlet control files in this directory:
646-ca
646-ca2
646-cn
646-cu
[...]
tsalagi
upper
ushebrew
uskata
utf8

表示已截斷的輸出。 我想要的輸出如下:

3-d
3x5
5lineoblique
[...]
twopoint
univers
usaflag
weird
whimsy

也就是說,我想要字體名稱。 我不能保證輸出格式,但是我不需要任何控制文件,也不需要信息行。 我不確定,但是我懷疑所有字體都必須有一個單詞名稱,因此可能使用正則表達式解決方案。 但是,控制文件具有類似的格式。

當前(硬編碼)解決方案:

read -a fonts <<<$(figlist | tail -n +4 | head -n 163)

這提供了我想要的,但是要求字體列表的長度不能改變,這是我想要的。

我寧願使用bash / standard命令/ builtins中的解決方案,因為這是我編寫腳本的語言,但是如果可以通過python單線或類似方式(例如python -c <some command> ),那么這也是可以接受的。

Python 單行代碼

figlist | python -c "import sys,re; fonts=re.search(r'Figlet fonts.+?:(.*)(?=Figlet control)',sys.stdin.read(), re.DOTALL); print(fonts.group(1).strip())"

輸出:

3-d
3x5
5lineoblique
[...]
twopoint
univers
usaflag
weird
whimsy

就這樣,伙計們

更新:

一個更短, 更好的 awk替代方法是:

figlist | awk '/Figlet/{p=!p;next}p'

我建議使用以下sed命令。


原始答案:

您可以使用sed

figlist | sed -n '/Figlet fonts/,/Figlet/{//!p;}'

例:

使用每種已安裝的figlet字體打印當前用戶名:

figlist \
  | sed -n '/Figlet fonts/,/Figlet/{//!p;}' \
  | while read -r font ; do
        echo "font: ${font}"
        figlet -f"${font}" "$(whoami)"
    done

由於這個問題也被標記為 ,因此我隨時可以添加awk解決方案:

/^Figlet fonts/ { on = 1 ; next }
/^Figlet control/ { on = 0 ; next }
on { print $0 }

測試(在bash,cygwin,Windows 10上):

$ echo 'Default font: standard
> Font directory: /usr/local/Cellar/figlet/2.2.5/share/figlet/fonts
> Figlet fonts in this directory:
> 3-d
> 3x5
> 5lineoblique
> [...]
> twopoint
> univers
> usaflag
> weird
> whimsy
> Figlet control files in this directory:
> 646-ca
> 646-ca2
> 646-cn
> 646-cu
> [...]
> tsalagi
> upper
> ushebrew
> uskata
> utf8
> ' | awk '/^Figlet fonts/ { on = 1 ; next } /^Figlet control/ { on = 0 ; next } on { print $0 }'
3-d
3x5
5lineoblique
[...]
twopoint
univers
usaflag
weird
whimsy

$

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM