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

时间:2015-07-26 15:51:11

标签: regex sed multiline

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

1234    dog, hat, cat

进入这个多行字符串:

1234 dog
1234 hat
1234 cat

它只是用新行替换逗号,而是在每个新行之后添加数字。我试图用sed命令这样做。我的问题是我想要捕获数字并进行反向引用但不影响简单的逗号匹配。我读到了关于\ K但我迷失了。任何人都可以找到一个sed -E命令来完成这个吗?

3 个答案:

答案 0 :(得分:1)

使用awk

更容易完成
s='1234    dog, hat, cat'

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

答案 1 :(得分:0)

Sed不知道\ d等。你需要使用[0-9], \{0,1\}, \+ ...... 如果你可能有不同数量的“单词”,那么就像建议的那样awk要好得多。

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

答案 2 :(得分:0)

这可能对您有用(GNU sed):

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

将多组空格减少到一个。如果该行不包含任何换行符,请用换行符替换每个,,然后再键入,打印,删除和重复。