如何获得不同长度的子串?
how to get a substring with varied length?
所以我正在编写一个脚本,它从输入中获取子字符串,该子字符串是文件路径 (/path/to/file.ext)
,如果目录 (/path/to)
不存在,它将 运行 mkdir -p /path/to
然后触摸 file.ext
.
我的问题是,如果 /
的
长度可能未知,我如何使用 cut
获取 /path/to
我的脚本目前看起来像这样
INPUT=[=10=]
SUBSTRING_PATH=`$INPUT | cut -d'/' -f 2`
if [! -d $SUBSTRING_PATH]; then
mkdir -p $SUBSTRING_PATH
fi
touch $INPUT
而不是 cut
,使用 dirname
和 basename
:
input=/path/to/foo
dir=$(dirname "$input")
file=$(basename "$input")
现在 $DIR
是 /path/to
,$FILE
是 foo
。
dirname
还会为您提供工作目录相对路径的有效目录(我的意思是 $(dirname file.txt)
是 .
)。这意味着,例如,您可以编写 "$dir/some/stuff/foo"
而不必担心您最终会进入完全不同的目录树(例如 /some/stuff
而不是 ./some/stuff
)。
正如@ruakh 在评论中提到的那样,如果您没有目录,而是想要丢弃最后一个标记的字符串(也许是 csv 文件的一行),一种方法可以做到这一点将是 "${input%,*}"
,其中逗号可以替换为任何定界符。据我所知,这是一个 bash 扩展。我只是编辑它,因为将来的流浪访问者在这里看到它可能比在评论中看到它更幸运;对于您的特定用例,dirname
和 basename
更合适。
所以我正在编写一个脚本,它从输入中获取子字符串,该子字符串是文件路径 (/path/to/file.ext)
,如果目录 (/path/to)
不存在,它将 运行 mkdir -p /path/to
然后触摸 file.ext
.
我的问题是,如果 /
的
cut
获取 /path/to
我的脚本目前看起来像这样
INPUT=[=10=]
SUBSTRING_PATH=`$INPUT | cut -d'/' -f 2`
if [! -d $SUBSTRING_PATH]; then
mkdir -p $SUBSTRING_PATH
fi
touch $INPUT
而不是 cut
,使用 dirname
和 basename
:
input=/path/to/foo
dir=$(dirname "$input")
file=$(basename "$input")
现在 $DIR
是 /path/to
,$FILE
是 foo
。
dirname
还会为您提供工作目录相对路径的有效目录(我的意思是 $(dirname file.txt)
是 .
)。这意味着,例如,您可以编写 "$dir/some/stuff/foo"
而不必担心您最终会进入完全不同的目录树(例如 /some/stuff
而不是 ./some/stuff
)。
正如@ruakh 在评论中提到的那样,如果您没有目录,而是想要丢弃最后一个标记的字符串(也许是 csv 文件的一行),一种方法可以做到这一点将是 "${input%,*}"
,其中逗号可以替换为任何定界符。据我所知,这是一个 bash 扩展。我只是编辑它,因为将来的流浪访问者在这里看到它可能比在评论中看到它更幸运;对于您的特定用例,dirname
和 basename
更合适。