gpt4 book ai didi

linux - 从文件中获取字符串

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:59:31 25 4
gpt4 key购买 nike

在我的包文件中,我有多个包。我能够检查文件中是否包含字符串,如果是,我想获取文件的版本。

Package: depictiontest
Version: 1.0
Filename: ./debs/com.icr8zy.depictiontest.deb
Size: 810
Description: Do not install. Testing Depiction.
Name: Depiction Test

所以以上是包裹的许多相似信息的一部分。每次我检测到包是否存在时,我都想获取版本。有什么办法吗?

顺便说一句,这是我用来检查文件是否存在的方法。

if grep -q "$filename" /location/Packages; then
#file exists
#get file version <-- stuck here
else
#file does not exists
fi

编辑:抱歉,也许我没有解释清楚,我已经有了包的名称,只想提取该包的版本。我不需要循环来获取所有名称和版本。希望这会清除它... :)

最佳答案

首先如何提取文件名?为什么不解析整个文件,然后过滤掉不存在的文件名。

awk '/^Package:/{p=$2}
/^Version:/{v=$2}
/^Filename:/{f=$2}
/^$/{print p, v, f}' Packages |
while read p v f; do
test -e "$f" || continue
echo "$p $v"
done

这对于例如带空格的文件名,但包文件无论如何都没有带空格的文件名。 (不过,您的示例文件名是非标准的;让我们假设它并不比这更糟。)

你想确保在 Packages 的末尾有一个空行,或者用 { sed '$/^$/d' Packages; 强制它 echo ; } | awk ...

编辑:这假定一个格式良好的 Packages 文件,记录之间有一个空行。如果一条记录缺少这些字段之一,输出将重复前一条记录的值——这很糟糕。如果有多个相邻的空行,它会输出两次相同的包。等等。如果你想要强大的解析,我会切换到 Perl 或 Python,或者使用标准的 Debian 工具(我相信一定有一个)。

关于linux - 从文件中获取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9164677/

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