我是 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