正则表达式 - 在字符串中使用前缀将行拆分为更多
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
将多组空格缩减为一组。如果该行不包含任何换行符,则将每个 ,
替换为换行符后跟键,打印,删除并重复。
我正在尝试使用 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
将多组空格缩减为一组。如果该行不包含任何换行符,则将每个 ,
替换为换行符后跟键,打印,删除并重复。