Remove first directory components from path of file

前端 未结 5 1495
-上瘾入骨i
-上瘾入骨i 2020-12-15 03:28

I need to remove one directory (the leftmost) from variables in Bash. I found ways how can I remove all the path or use dirname and others but it was removing a

相关标签:
5条回答
  • 2020-12-15 03:40

    You can use any of:

    x=a/b/c/d
    y=a/
    echo ${x#a/}
    echo ${x#$y}
    echo ${x#*/}
    

    All three echo commands produce b/c/d; you could use the value in any way you choose, of course.

    The first is appropriate when you know the name you need to remove when writing the script.

    The second is appropriate when you have a variable that contains the prefix you need to remove (minor variant: y=a; echo ${x#$y/}).

    The third is the most general - it removes any arbitrary prefix up to the first slash. I was pleasantly surprised to find that the * worked non-greedily when I tested it with bash (version 3.2) on MacOS X 10.6.6 - I'll put that down to too much Perl and regex work (because, when I think about it, * in shell doesn't include slashes).

    0 讨论(0)
  • 2020-12-15 03:46

    None of the examples above solved my problem. I wanted to be able to switch java versions by changing the $PATH value. After googling and cannot find sufficient answer, I weaved my own solution below.

    Here is an excerpt in my .bashrc:

    jv8() {
        export JAVA_HOME=/opt/jdk1.8.0_121
        y=$(echo $PATH | tr ':' '\n' |sed '/\/opt\/jdk/d' | tr '\n' ':')
        export PATH=$JAVA_HOME/bin:$y
    }
    
    jv6() {
        export JAVA_HOME=/opt/jdk1.6.0_45
        y=$(echo $PATH | tr ':' '\n' |sed '/\/opt\/jdk/d' | tr '\n' ':')
        export PATH=$JAVA_HOME/bin:$y
    }
    

    So, in my bash shell, I can toggle simply by:

    $> jv6
    java -version
    java version "1.6.0_45"
    Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
    Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
    $> jv8
    java -version
    java version "1.8.0_121"
    Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
    Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
    
    0 讨论(0)
  • 2020-12-15 03:55
    echo "a/project/hello.c" | sed 's,^[^/]*/,,'
    
    0 讨论(0)
  • 2020-12-15 03:57

    Look at man expr

    expr "foo/bar/baz" : '[^/]*/\(.*\)' will do what you want.

    0 讨论(0)
  • 2020-12-15 04:00
    echo a/project/hello.c | cut -d'/' -f2-
    
    0 讨论(0)
提交回复
热议问题