正则表达式 - 在字符串中使用前缀将行拆分为更多

Regular Expression - split line into more with prefix in string

我正在尝试使用 sed 获取此字符串:

1234    dog, hat, cat

进入这个多行字符串:

1234 dog
1234 hat
1234 cat

它只是用换行符替换逗号,但在每个换行符后放置数字。我正在尝试使用 sed 命令执行此操作。我的问题是我想捕捉数字并进行反向引用但不影响简单的逗号匹配。我读到了 \K 但我迷路了。谁能帮我找到一个完成这个的 sed -E 命令?

使用 awk 更容易完成:

s='1234    dog, hat, cat'

awk -F '[, ]+' '{for(i=2; i<=NF; i++) print , $i}' <<< "$s"
1234 dog
1234 hat
1234 cat

Sed 不知道 \d 之类的。您需要使用 [0-9], \{0,1\}, \+... 另外,如果您可能有不同数量的 "words",那么 awk 会更好,正如建议的那样。

sed 's/^\([0-9]\+\)[\ \t]\+\([^,]\+\),[\ \t]\+\([^,]\+\),[\ \t]\+\([^,]\+\)/ \n \n \n/g'

这可能适合您 (GNU sed):

sed -r 's/ +/ /g;/\n/!s/^((\S+)\s*[^,]*),/\n/;P;D' file

将多组空格缩减为一组。如果该行不包含任何换行符,则将每个 , 替换为换行符后跟键,打印,删除并重复。