拾取弦线的多个部分

拾取弦线的多个部分

我是 shell 脚本的新手。这只是之前一些问题的变体,但我仍然找不到答案。我有以下txt文件(一行且没有空格):

;100=Raspberry;101=Apple;102=Orange;103=Kiwi;104=grape;

我喜欢选择任何带有101=*103=*作为输出的东西。因此输出需要如下所示:

;101=Apple;103=Kiwi

我试图通过修改来编写命令

grep -o -m 1 ';101=.*;\|;103=.*' file.txt

但它会选择 后的所有内容101=.*。我知道命令是这么说的,但仍然不确定如何更改它。我使用的是 Ubuntu 16。

答案1

.*尝试匹配尽可能多的字符,这就是您得到该行其余部分的原因。因此,.您必须使用[^;](除分号之外的任何字符)来代替(任何字符):

grep -o ';101=[^;]*\|;103=[^;]*'

-m 1我不知道要通过一句话来实现什么目标。无论如何,您需要将输出合并到一行中才能获得所需的结果。但我敢打赌您可以自己找到如何做(最终这是您的练习,而不是我们的)。

答案2

我使用下面的 awk 命令来实现相同的效果

 awk -F ";" '{print ";"$3";"$5}' filename

输出

;101=Apple;103=Kiwi

相关内容