删除文件路径中最后一个/之前的所有内容
Delete everything before last / in a file path
我在一个文件中有很多文件路径,如下所示:
/home/rtz11/files/testfiles/547/prob547455_01
我想使用 bash 脚本将所有文件名打印到屏幕上,基本上是最后一个 /
之后的任何内容。我不想假设它总是相同的长度,因为它可能不是。
是否有办法删除最后一个 /
之前的所有内容?也许是 sed
命令?
为此使用 sed
太过分了 -- bash 内置了广泛的字符串操作,并且在仅对单行操作时使用此内置支持效率要高得多。
s=/home/rtz11/files/testfiles/547/prob547455_01
basename="${s##*/}"
echo "$basename"
这将删除贪婪匹配 */
字符串开头的所有内容。参见 the bash-hackers wiki entry for parameter expansion。
如果您只想删除 在 最后一个 /
之前的所有内容,但不包括它(对您的问题的字面解读,但通常也不太有用操作),您可能需要 if [[ $s = */* ]]; then echo "/${s##*/}"; else echo "$s"; fi
.
awk '{print $NF}' FS=/ input-file
'print $NF' 指示 awk 打印每行的最后一个字段,并分配 FS=/ 使正斜杠成为字段分隔符。在 sed 中,你可以这样做:
sed 's@.*/@@' input-file
这只会删除包括最后一个 /
.
在内的所有内容
曲折但只是因为我记得我使用的语法:
cat file | rev | cut -d/ -f1 | rev
为'cat'设置皮肤的多种方法。哎哟
另一种方式:
使用基本名称可执行文件(命令):
basename /path/with/many/slashes/and/file.extension
>file.extension
basename /path/with/many/slashes/and/file.extension .extension
或
basename -s .extension /path/with/many/slashes/and/file.extension
> file
我在一个文件中有很多文件路径,如下所示:
/home/rtz11/files/testfiles/547/prob547455_01
我想使用 bash 脚本将所有文件名打印到屏幕上,基本上是最后一个 /
之后的任何内容。我不想假设它总是相同的长度,因为它可能不是。
是否有办法删除最后一个 /
之前的所有内容?也许是 sed
命令?
为此使用 sed
太过分了 -- bash 内置了广泛的字符串操作,并且在仅对单行操作时使用此内置支持效率要高得多。
s=/home/rtz11/files/testfiles/547/prob547455_01
basename="${s##*/}"
echo "$basename"
这将删除贪婪匹配 */
字符串开头的所有内容。参见 the bash-hackers wiki entry for parameter expansion。
如果您只想删除 在 最后一个 /
之前的所有内容,但不包括它(对您的问题的字面解读,但通常也不太有用操作),您可能需要 if [[ $s = */* ]]; then echo "/${s##*/}"; else echo "$s"; fi
.
awk '{print $NF}' FS=/ input-file
'print $NF' 指示 awk 打印每行的最后一个字段,并分配 FS=/ 使正斜杠成为字段分隔符。在 sed 中,你可以这样做:
sed 's@.*/@@' input-file
这只会删除包括最后一个 /
.
曲折但只是因为我记得我使用的语法:
cat file | rev | cut -d/ -f1 | rev
为'cat'设置皮肤的多种方法。哎哟
另一种方式:
使用基本名称可执行文件(命令):
basename /path/with/many/slashes/and/file.extension
>file.extension
basename /path/with/many/slashes/and/file.extension .extension
或
basename -s .extension /path/with/many/slashes/and/file.extension
> file