作者:jystmj-2009 | 来源:互联网 | 2023-07-05 13:42
例如,如果您的文件包含以下几行
1=10200|2=2343i|3=otit|5=89898|54=9546i96i|10=2459
1=10200|54=9546i96i|10=2459|2=2343i|3=otit|5=8
1=10200|5=IGY|14=897|459=122|132=1|54=9546i96i|10=2459
1=10200|2=2343i|5=0|54=9546i96i
输出应为
5=89898
5=8
5=IGY
5=0
您可以将grep
与-o
标志一起使用,以仅返回正则表达式匹配项。
假设您有一个要解析的file.txt
:
cat file.txt | grep -o -E "(\||^)5=[^|]*" | grep -o "5=[^|]*"
这将匹配从5=
开始直到第一个|
的所有内容。
通过在您提供的输入上运行此命令,我得到:
5=89898
5=8
5=IGY
5=0
欢呼
编辑:如Walter A所建议,我以前的解决方案并未涵盖所有情况。
我添加了一个额外的解析步骤:首先,在行的开头或5=...
处获得与|5=...
匹配的所有字符串,然后删除|
。
,
使用(^|[|])
来匹配字段的开头(行的开头或|
),并记住/匹配字符串,直到下一个|
或行尾为止。
sed -nr 's/.*(^|[|])(5=[^|]*).*/\2/p' file