我正在寻找sed
像这里这样的解决方案:Print everything after nth delimiter
sed -E 's/^([^\]*[\]){3}//' infile
Run Code Online (Sandbox Code Playgroud)
但要提取第 n 个分隔符之前的文本,而不是像示例中那样提取第 n 个分隔符。适用于所有 sed 变体的东西。并像示例一样对所有行进行操作。
此示例中的分隔符是\
但可以是任何其他分隔符。应该适用于任何版本的 sed。
你为什么不使用cut
?
cut -d '\' -f 1-3 infile
Run Code Online (Sandbox Code Playgroud)
使用sed
,不是删除匹配,而是捕获它并使用反向引用将整行替换为捕获的组:
sed -E 's/(^([^\]*[\]){3}).*/\1/' infile
Run Code Online (Sandbox Code Playgroud)
虽然这也会打印结尾的反斜杠......为了避免这种情况,你可以运行
sed -E 's/(^([^\]*[\]){2}[^\]*).*/\1/' infile
Run Code Online (Sandbox Code Playgroud)