How to cut the last field in this shell string
LINE="/string/to/cut.txt"
So that the string would look like this
LINE="/string/to/"
Thanks in advance!
To remove the last n characters of a string, we can use the parameter expansion syntax ${str::-n} in the Bash shell. -n is the number of characters we need to remove from the end of a string.
There is a built-in function named trim() for trimming in many standard programming languages. Bash has no built-in function to trim string data. But many options are available in bash to remove unwanted characters from string data, such as parameter expansion, sed, awk, xargs, etc.
In bash, a string can also be divided without using $IFS variable. The 'readarray' command with -d option is used to split the string data. The -d option is applied to define the separator character in the command like $IFS. Moreover, the bash loop is used to print the string in split form.
For what it's worth, a cut
-based solution:
NEW_LINE="`echo "$LINE" | rev | cut -d/ -f2- | rev`/"
I think you could use the "dirname" command. It takes in input a file path, removes the filename part and returns the path. For example:
$ dirname "/string/to/cut.txt"
/string/to
This will work in modern Bourne versions such as Dash, BusyBox ash, etc., as well as descendents such as Bash, Korn shell and Z shell.
LINE="/string/to/cut.txt"
LINE=${LINE%/*}
or to keep the final slash:
LINE=${LINE%/*}/
echo "/string/to/cut.txt" | awk -F'/' '{for (i=1; i<NF; i++) printf("%s/", $i)}'
echo $LINE | grep -o '.*/'
works too.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With