我正在寻找sed
像这里这样的解决方案:Print everything after nth delimiter
sed -E 's/^([^\]*[\]){3}//' infile
但要提取第 n 个分隔符之前的文本,而不是像示例中那样提取第 n 个分隔符。适用于所有 sed 变体的东西。并像示例一样对所有行进行操作。
此示例中的分隔符是\
但可以是任何其他分隔符。应该适用于任何版本的 sed。
我正在寻找sed
像这里这样的解决方案:Print everything after nth delimiter
sed -E 's/^([^\]*[\]){3}//' infile
但要提取第 n 个分隔符之前的文本,而不是像示例中那样提取第 n 个分隔符。适用于所有 sed 变体的东西。并像示例一样对所有行进行操作。
此示例中的分隔符是\
但可以是任何其他分隔符。应该适用于任何版本的 sed。
你为什么不使用
cut
?使用
sed
,不是删除匹配,而是捕获它并使用反向引用将整行替换为捕获的组:虽然这也会打印结尾的反斜杠......为了避免这种情况,你可以运行
使用
awk
:要保留第 n个分隔符,可以使用以下命令。
您可以用换行符替换第 n个分隔符(否则换行符不会出现在模式空间中),然后删除以换行符开头的所有内容。这里对于 n == 3:
或者如果必须在输出中保留第 n个分隔符:
要跳过没有 n 分隔符的行:
更短的 awk: