小编CGa*_*ote的帖子

Perl 单行程序将一行拆分为多行迭代

我有一个棘手的问题,我想知道是否有一个聪明的正则表达式解决方案。我的输入数据由两列组成,但第一列需要分成多行,第二列保持不变。例如,一个名为 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)

它仍然只进行一轮。谁有一些想法?

regex iteration perl newline one-liner

-1
推荐指数
1
解决办法
157
查看次数

标签 统计

iteration ×1

newline ×1

one-liner ×1

perl ×1

regex ×1