我正在尝试使用sed来获取此字符串:
1234 dog, hat, cat
进入这个多行字符串:
1234 dog
1234 hat
1234 cat
它只是用新行替换逗号,而是在每个新行之后添加数字。我试图用sed命令这样做。我的问题是我想要捕获数字并进行反向引用但不影响简单的逗号匹配。我读到了关于\ K但我迷失了。任何人都可以找到一个sed -E命令来完成这个吗?
答案 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
将多组空格减少到一个。如果该行不包含任何换行符,请用换行符替换每个,
,然后再键入,打印,删除和重复。