gpt4 book ai didi

linux - 将字符串修剪到 Bash 中的某些字符

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:05:14 26 4
gpt4 key购买 nike

我正在尝试制作一个 bash 脚本,它会告诉我 Linux 内核的最新稳定版本。

问题是,虽然我可以删除某些字符之后的所有内容,但我似乎无法删除某些字符之前的所有内容。

#!/bin/bash

wget=$(wget --output-document - --quiet www.kernel.org | \grep -A 1 "latest_link")

wget=${wget##.tar.xz\">}

wget=${wget%</a>}

echo "${wget}"

输出以某种方式“忽略”了 wget=${wget##.tar.xz\">} 行。

最佳答案

您正在尝试从字符串的开头删除模式 .tar.xz\"> 的最长匹配项,但您的字符串不是以 .tar.xz 开头,所以没有匹配项。

你必须使用

wget=${wget##*.tar.xz\">}

然后,因为您在脚本中而不是交互式 shell 中,所以不需要转义 \grep(可能是为了防止使用别名),因为别名已禁用在非交互式 shell 中。

并且,正如所指出的,将变量命名为与现有命令相同的名称(经常发现:test)必然会导致混淆。

如果您想使用专为处理 HTML 而设计的命令行工具,您可以查看 W3C HTML-XML-utils (Ubuntu:apt install html-xml-utils)。使用它们,您可以获得所需的信息,如下所示:

$ curl -sL www.kernel.org | hxselect 'td#latest_link' | hxextract a -
4.10.8

或者,详细来说:

curl -sL www.kernel.org |     # Fetch page
hxselect 'td#latest_link' | # Select td element with ID "latest_link"
hxextract a - # Extract link text ("-" for standard input)

关于linux - 将字符串修剪到 Bash 中的某些字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43261683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com