regex - 提取文本文件行中的部分重复模式
问题描述
给定一个文本文件的形式:
firstword<number1>,<string1>:<number2>,<string2>:<number3>,<string>:<number4>...
firstword<number1>,<string1>:<number2>,<string2>:<number3>,<string>:<number4>...
firstword<number1>,<string1>:<number2>,<string2>:<number3>,<string>:<number4>...
...
其中每一行可以彼此不同,并且可以有任意数量的字符串:数字对。“firstword”总是一样的。字符串和数字的内容可以改变,例如数字可以是“12345”,字符串可以是“abc”(不带引号)。
此外,一行可以有多次相同的字符串(多少次是未知的,每行不同),每行都有不同的关联编号。例如:
firstword123,abc:123,cde:234,abc:345,def:456
如果现在只想提取第一个单词和数字(在本例中为 firstword123),以及特定字符串的一行中的所有 string:number 对,如何做到这一点?在上面的示例中,如果为字符串选择值“abc”,则提取的行应如下所示:
firstword123,abc:123,abc:345
我正在寻找一种适用于 Bash(可能还有其他命令)的解决方案。
解决方案
你可以为此使用 perl
#!/usr/bin/perl
my $first='firstword123';
my $str='abc';
while (<DATA>) {
next if not /^$first/;
print "$first";
print ",$_" for ($_ =~ /$str:\d+/g);
}
__DATA__
firstword123,abc:123,cde:234,abc:345,def:456
出去:
firstword123,abc:123,abc:345
推荐阅读
- spring-boot - 结合spring-kafka和reactor-kafka时出现意外的循环依赖
- javascript - Window.print() 函数弄乱了表格
- detox - applesimutils --list 在 MacOS Mojave 和 Xcode 11.3 更新后返回空列表 []
- google-apps-script - 如何跨多个 Google 工作表自动化 COUNTIF 公式?
- python - 跳过csv.file中的第一行,当它是一个字符串时,使用python
- java - 如何正确引用java jar中的图像文件?
- python-3.x - 如何修复:AttributeError:模块“twint”没有属性“config”
- xamarin.forms - 适用于 Android 和 IOS 的 Visual Studio 2017 Xamarin 移动应用程序中的 RTMP URL
- javascript - 如何使 HTML 中的按钮具有数字的值?
- c# - 最长升序 C#