使用sed替换行尾的匹配字符串
我有一个文件内容,比如使用sed替换行尾的匹配字符串,sed,Sed,我有一个文件内容,比如 /var/lib/mlocate /var/lib/dpkg/info/mlocate.conffiles /var/lib/dpkg/info/mlocate.list /var/lib/dpkg/info/mlocate.md5sums /var/lib/dpkg/info/mlocate.postinst /var/lib/dpkg/info/mlocate.postrm /var/lib/dpkg/info/mlocate.prerm 在上面的文件内容中,我想使
/var/lib/mlocate
/var/lib/dpkg/info/mlocate.conffiles
/var/lib/dpkg/info/mlocate.list
/var/lib/dpkg/info/mlocate.md5sums
/var/lib/dpkg/info/mlocate.postinst
/var/lib/dpkg/info/mlocate.postrm
/var/lib/dpkg/info/mlocate.prerm
在上面的文件内容中,我想使用sed将每行的最后一个斜杠(/)替换为空格,如下所示
/var/lib mlocate
/var/lib/dpkg/info mlocate.conffiles
/var/lib/dpkg/info mlocate.list
/var/lib/dpkg/info mlocate.md5sums
/var/lib/dpkg/info mlocate.postinst
/var/lib/dpkg/info mlocate.postrm
/var/lib/dpkg/info mlocate.prerm
请帮我做这件事
sed 's|\(.*\)/|\1 |' file
的正则表达式在默认情况下是贪婪的,因此sed
将所有内容匹配到最后一个*/
实例/
默认情况下使用BRE(基本正则表达式),其中,sed
和(
必须是)
转义的,才能包含捕获组(单独捕获所包含的子表达式)\
- GNU(Linux)Sed和BSD/macOS Sed支持非标准选项
以启用ERE(扩展正则表达式),在这种情况下,不需要括号转义:-E
sed-E的|(.*)/|\1 |'文件#或-r,带有GNU sed/非macOS BSD sed
- GNU(Linux)Sed和BSD/macOS Sed支持非标准选项
- 请注意如何选择正则表达式分隔符
,而不是常规的|
;使用/
允许不加限制地将|
用作要匹配的文本/
- 在替换部件中,
指的是第一个(也是唯一一个)捕获组(\1
)匹配的内容,这是最后一个\(…\)
//code>的全部内容,但不包括。通过在
后面加上一个文本空格,可以得到所需的结果\1
awk
version:没有理由使用此命令执行任务。但它是有效的:)
awk 'BEGIN{FS=OFS="/"} {$(NF-1)=$(NF-1) " " $NF; NF--} 1' inputfle
/var/lib mlocate
/var/lib/dpkg/info mlocate.conffiles
/var/lib/dpkg/info mlocate.list
/var/lib/dpkg/info mlocate.md5sums
/var/lib/dpkg/info mlocate.postinst
/var/lib/dpkg/info mlocate.postrm
/var/lib/dpkg/info mlocate.prerm