我有一个棘手的问题,我想知道是否有一个聪明的正则表达式解决方案。我的输入数据由两列组成,但第一列需要分成多行,第二列保持不变。例如,一个名为 test 的文件:
cat_;_dog_;_rat animal
chair_;_desk object
Run Code Online (Sandbox Code Playgroud)
输出需要如下所示:
cat animal
dog animal
rat animal
chair object
desk object
Run Code Online (Sandbox Code Playgroud)
有任意数量的; 每行上有分隔符。可能有一种方法可以在单行中执行此操作,我更喜欢这种方法,因为我正在通过管道输入和输出数据。我试过这个:
perl -pe 's/(\w+)_;_(\w+)\t(.+)/$1\t$3\n$2\t$3/g' test
Run Code Online (Sandbox Code Playgroud)
第一列包含(\w+)由 分隔的单词_;_,然后是制表符,然后是第二列。但这仅消耗数据的一次迭代:
cat animal
dog_;_rat animal
chair object
desk object
Run Code Online (Sandbox Code Playgroud)
我也尝试了以下方法,以防/g全局标记不正确:
perl -pe 's/(\w+)(_;_(\w+))+\t(.+)/$1\t$4\n$3\t$4/g' test
Run Code Online (Sandbox Code Playgroud)
它仍然只进行一轮。谁有一些想法?