我想从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)
正确的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从左