sed是否提供了删除一些单独模式的功能,但不是全部?
例如:我有一个包含目录列表的文本文件,我需要从包含4个斜线的行中删除3个斜杠,而不是3个,而不是5 - 4个。
在:
/foo/bar
/foo/bar/baz/quux
/boo/bar/baz
后:
/foo/bar
foobarbaz/quux
/boo/bar/baz
答案 0 :(得分:4)
使用awk
:
$ awk -F/ 'NF==5{print $2$3$4"/"$5;next;}1' inputfile
/foo/bar
foobarbaz/quux
/boo/bar/baz
答案 1 :(得分:2)
匹配任何只有4 /
的行,并使用GNU sed
和rev
对这些行执行替换:
% 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
答案 2 :(得分:1)
这很粗糙但有效。更喜欢awk解决方案
sed 's:^/\([^/]\+\)/\([^/]\+\)/\([^/]\+\)\([^/]*/[^/]*\)$:\1\2\3\4:' file
/foo/bar
foobarbaz/quux
/foo/bar/baz/quux/dust
/boo/bar/baz