我想匹配一个模式,但用匹配的模式替换其他东西。
pattern1 X1 X2 X3
pattern2 X4 X5
...
应该转化为
pattern1-1
pattern1-2
pattern1-3
pattern2-4
pattern2-5
...
我不能只替换“X”,因为它连续多次出现。
我试过 sed -r '/(pattern[0-9])/{ s/X/\n\1/g; }'
但这会给我一个 invalid reference\1 on `s
错误。
还有其他方法吗?
最佳答案
这可能对你有用(GNU sed):
sed -E 's/(\S+)\s+X(\S+)/\1-\2\n\1/;/-/!s/.*//;P;D' file
使用模式匹配来匹配第一个字段和另一个以 X
开头的字段。操作到所需的结果,然后再次附加换行符和第一个字段。打印/删除直到并包括第一个换行符,如果一行与删除不匹配,则其内容即打印一个空行。
如果不需要空行,使用:
sed -E 's/(\S+)\s+X(\S+)/\1-\2\n\1/;/-/P;D' file
关于SED 为下一个 block /命令保留模式 in\1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59820385/