打印第 n 个分隔符之前的所有内容

Sme*_*ink -2 sed

我正在寻找sed像这里这样的解决方案:Print everything after nth delimiter

sed -E 's/^([^\]*[\]){3}//' infile
Run Code Online (Sandbox Code Playgroud)

但要提取第 n 个分隔符之前的文本,而不是像示例中那样提取第 n 个分隔符。适用于所有 sed 变体的东西。并像示例一样对所有行进行操作。

此示例中的分隔符是\但可以是任何其他分隔符。应该适用于任何版本的 sed。

don*_*sti 5

你为什么不使用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)