提取两行之间的文本

2024-04-24 21:56:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个^{cd1>}脚本,以使用^{{cd3>}可视化^{cd2>}所可用的各种字体。

^{cd3>}提供如下输出:

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

[…]s表示已截取的输出。我所需的输出如下:

^{pr2}$

也就是说,我想要字体名称。我不能保证输出格式,但我不想要任何控制文件,我不想要信息行。我不确定,但我怀疑所有字体都必须有一个单词名,所以regex解决方案可能是可能的。但是,控制文件的格式类似。

当前(硬编码)解决方案:

^{pr3}$

这提供了我想要的,但要求字体列表的长度永远不会改变,我不想改变。

我更喜欢bash/standard命令/内置语言,因为这是我编写脚本的语言,但是如果可以通过python一行或类似的东西(例如^{{cd5>})获得,那么这也是可以接受的。


Tags: 文件in脚本语言格式字体fonts解决方案
3条回答

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())"

输出:

^{pr2}$

就这些了,伙计们

由于这个问题也被标记为,我可以随意添加一个awk解决方案:

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

测试(在bash、cygwin、Windows 10上):

^{pr2}$

更新:

较短的和preferableawk的替代方案是:

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

我建议使用下面的sed命令。在


原始答案:

您可以使用sed

^{pr2}$

示例:

用每个已安装的figlet字体打印当前用户名:

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

相关问题 更多 >