1

sed 是否提供删除多个单独模式的功能,但不是全部?

例如:我有一个包含目录列表的文本文件,我需要从包含正好 4 个斜杠的行中删除 3 个斜杠,而不是 3,而不是 5-4。

前:

/foo/bar
/foo/bar/baz/quux
/boo/bar/baz

后:

/foo/bar
foobarbaz/quux
/boo/bar/baz
4

3 回答 3

4

使用起来更容易awk

$ awk -F/ 'NF==5{print $2$3$4"/"$5;next;}1' inputfile
/foo/bar
foobarbaz/quux
/boo/bar/baz
于 2013-09-20T14:19:13.003 回答
2

匹配任何只有 4 的行,并使用and/对这些行执行替换:GNU sedrev

% cat file
/1/2/3
/1/2/3/4
/1/2/3/4/5

% rev file | sed -r '\%(^[^/]+/){4}$%{s%/%%2g}' | rev
/1/2/3
123/4
/1/2/3/4/5
于 2013-09-20T14:19:00.210 回答
1

这很粗糙,但很有效。更喜欢 awk 解决方案

sed  's:^/\([^/]\+\)/\([^/]\+\)/\([^/]\+\)\([^/]*/[^/]*\)$:\1\2\3\4:' file
/foo/bar
foobarbaz/quux
/foo/bar/baz/quux/dust
/boo/bar/baz
于 2013-09-20T14:20:24.463 回答