关于正则表达式过滤字符串

Trim string from string

本问题已经有最佳答案,请猛点这里访问。

我想从变量$FILES中去掉这个字符串/tmp/files/。例如:

1
2
3
4
setenv FILES=/tmp/files/list
ONLY_L=`trim($FILES,'/tmp/files/')`
echo $ONLY_L
#should see only 'list'

我虽然想用sed来做这个工作,但看起来有点"难看",因为所有的\都是在/之前出现的。


对于sed,您不必使用/

例如,这也适用于:

1
echo $FILES | sed 's#/tmp/files/##'

您应该为此使用basename命令。它会自动删除路径并只留下文件名:

1
basename /tmp/files/list

输出:

1
list


ONLY_L="${FILES##*/}"

ONLY_L="$(basename"$FILES")"

ONLY_L="$(echo"$FILES" | sed 's|.*/||')"

做你想要的


您不需要sed或调用工具。bash提供使用string substitution的能力。

1
2
3
4
5
6
7
8
9
$ FILES='/tmp/files/list'

# do this
$ echo"${FILES/\/tmp\/files\/}"
list

# or this
$ echo"${FILES##*/}"
list