为什么这个sed命令不起作用?

kwa*_*gjj 1 regex sed

我想从pwd命令的结果中删除父目录的某些部分.第一步,我想在sed'home'之后获得字符串部分,但老实说我不知道​​我做错了什么.我想我已经正确设置了子串,并成为sed替代品的输出.

$ pwd
/home/user1/projects/bashscript
$ pwd | sed -r 's/\*home(\*)/\1/'
/home/user1/projects/bashscript
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 6

正确的sed正则表达式是:

pwd | sed -r 's/.*home(.*)/\1/'
Run Code Online (Sandbox Code Playgroud)

*可以匹配shell中的任何东西,即glob模式,但是在regex等效模式中.*.

但是,如果您正在使用bash,则无需使用sed.你可以使用bash字符串操作来做到这一点:

echo "${PWD/\/home/}"
Run Code Online (Sandbox Code Playgroud)

更新:根据Ed的评论如果有多个/homein PWD.

假设PWD=/foo/123/home/dir/home/abcd:

使用更正确:

echo "${PWD#*/home}"
/dir/home/abcd
Run Code Online (Sandbox Code Playgroud)
  • # 将从字符串的左(开始)找到一个glob图案
  • */home将删除一切,直到第一次出现/home中值PWD从左