Lin*_*ner 2 bash string shell-script
我想找到一种简单的方法来提取字符串的一部分,直到第一个数字出现的位置(可能使用正则表达式而不是逐个字符遍历字符串)。我正在使用它来从rpm -qa没有版本的情况下提取包名称。例如:
Parsing: perl-Text-ParseWords-3.30-1.fc22.i686
Result: perl-Text-ParseWords
Run Code Online (Sandbox Code Playgroud)
我们可以简单地修改 rpm 查询以仅输出名称。
rpm -qa --queryformat "%{NAME}\n"
Run Code Online (Sandbox Code Playgroud)
或者我们可以用正则表达式弄脏
不完全是“直截了当”,但这里有一个 sed 正则表达式,应该能够做到这一点。
sed -e 's/\([^\.]*\).*/\1/;s/-[0-9]*$//' <<< "perl-Text-ParseWords-3.30-1.fc22.i686"
Run Code Online (Sandbox Code Playgroud)
这应该处理所有事情,除了包名中有一个句点(我什至认为这是不允许的)。
快速分解
s/\([^\.]*\).*/\1/在第一期之前抓住一切。于是perl-Text-ParseWords-3.30-1.fc22.i686变成perl-Text-ParseWords-3
s/-[0-9]*$//摆脱那个尾随-和第一个版本数字。于是perl-Text-ParseWords-3变成perl-Text-ParseWords。