sed是否提供功能来删除多个单独的模式,但不是全部?
例如:我有一个文本文件,其中包含目录列表,我需要从包含4个斜杠的行中删除3个斜杠,而不是3个斜杠,而不是5-4斜杠。
在此之前:
/foo/bar
/foo/bar/baz/quux
/boo/bar/baz
之后:
/foo/bar
foobarbaz/quux
/boo/bar/baz
发布于 2013-09-20 14:19:13
使用awk
更容易
$ awk -F/ 'NF==5{print $2$3$4"/"$5;next;}1' inputfile
/foo/bar
foobarbaz/quux
/boo/bar/baz
发布于 2013-09-20 14:19:00
匹配只有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
发布于 2013-09-20 14:20:24
这很粗糙,但很管用。更喜欢awk解决方案
sed 's:^/\([^/]\+\)/\([^/]\+\)/\([^/]\+\)\([^/]*/[^/]*\)$:\1\2\3\4:' file
/foo/bar
foobarbaz/quux
/foo/bar/baz/quux/dust
/boo/bar/baz
https://stackoverflow.com/questions/18918864
复制相似问题