如何获得长度不一的子串?

时间:2015-01-13 23:42:20

标签: bash shell cut substring

所以我正在编写一个脚本,它从输入中获取子字符串,这是文件(/path/to/file.ext)的路径,如果目录(/path/to)不存在,它将运行mkdir -p /path/to然后触摸file.ext

我的问题是,如果cut的长度可能未知,我如何使用/path/to获取/

我的脚本目前看起来像这样

INPUT=$0
SUBSTRING_PATH=`$INPUT | cut -d'/' -f 2`

if [! -d $SUBSTRING_PATH]; then
    mkdir -p $SUBSTRING_PATH
fi

touch $INPUT

1 个答案:

答案 0 :(得分:4)

而不是cut,请使用dirnamebasename

input=/path/to/foo
dir=$(dirname "$input")
file=$(basename "$input")

现在$DIR/path/to$FILEfoo

dirname还会为您提供工作目录相对路径的有效目录(我的意思是$(dirname file.txt).)。这意味着,例如,您可以编写"$dir/some/stuff/foo",而不必担心最终会出现在完全不同的目录树中(例如/some/stuff而不是./some/stuff)。

正如@ruakh在评论中提到的那样,如果你没有一个目录,但是你想要丢弃最后一个(可能是csv文件的一行)的一串令牌,一种方法就是"${input%,*}",其中逗号可以由任何分隔符替换。据我所知,这是一个bash扩展。我只是编辑它,因为未来的流浪访客可能会比评论中看到更好的运气。对于您的特定用例,dirnamebasename更适合。