14 我有一个带有时间戳的日志文件。有时一行中有多个时间戳。现在,我想从一行中删除所有时间戳,但保留第一个。 我可以,s/pattern//2但是只能删除第二次出现,sed并且不允许类似的操作s/pattern//2-。 有什么建议么? sed — 福克特·范·休斯登 source 我应该告诉我这是busybox的问题。抱歉 — Folkert van Heusden
4 使用GNU sed: sed 's/pattern//2g' 该2指定的第二图案和所有其余的g应该删除。因此,这将保留第一个。 — αғsнιη source 1 Cygwin拥有(显然是)的端口,而MacOS没有。阿赫!这个解决方案非常优雅。 — r_alex_hall
7 这应该可以工作(如果_与日志冲突,请用_代替): sed -e 's/pattern/_&/1' -e 's/\([^_]\)pattern//g' -e 's/_\(pattern\)/\1/' — 耶利亚格雷 source 1 如果您需要唯一的定界符,请使用\n。 — mikeserv
5 sed -e ':begin;s/pattern//2;t begin' 或不使用sed goto: sed -e 's/\(pattern\)/\1\n/;h;s/.*\n//;s/pattern//g;H;g;s/\n.*\n//' 从第n个(例如3个)位置删除的通用解决方案是: sed -e ':begin;s/pattern//4;t begin' sed -e 's/\(pattern\)/\1\n/;h;s/.*\n//3;s/pattern//g;H;g;s/\n.*\n//' — f source
1 @jillagre的答案略有变化(针对健壮性进行了修改)可能类似于: sed 's/p\(attern\)/p\n\1/;s///g;s/\n//' ...但是在某些情况下,sed您可能需要n将第一个s///ubstitution语句右侧的替换为原义的\newline字符。 — 麦克维 source