💾 Archived View for rawtext.club › ~s0kx › pure-sh-bible › strings.gmi captured on 2023-07-10 at 14:10:43. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2021-12-03)
-=-=-=-=-=-=-
lstrip() { # Usage: lstrip "string" "pattern" printf '%s\n' "${1##$2}" }
Example Usage:
$ lstrip "The Quick Brown Fox" "The " Quick Brown Fox
rstrip() { # Usage: rstrip "string" "pattern" printf '%s\n' "${1%%$2}" }
Example Usage:
$ rstrip "The Quick Brown Fox" " Fox" The Quick Brown
This is an alternative to sed, awk, perl and other tools. The
function below works by finding all leading and trailing white-space and
removing it from the start and end of the string.
trim_string() { # Usage: trim_string " example string " # Remove all leading white-space. # '${1%%[![:space:]]*}': Strip everything but leading white-space. # '${1#${XXX}}': Remove the white-space from the start of the string. trim=${1#${1%%[![:space:]]*}} # Remove all trailing white-space. # '${trim##*[![:space:]]}': Strip everything but trailing white-space. # '${trim#${XXX}}': Remove the white-space from the end of the string. trim=${trim%${trim##*[![:space:]]}} printf '%s\n' "$trim" }
Example Usage:
$ trim_string " Hello, World " Hello, World $ name=" John Black " $ trim_string "$name" John Black
This is an alternative to sed, awk, perl and other tools. The function below works by abusing word splitting to create a new string without leading/trailing white-space and with truncated spaces.
# shellcheck disable=SC2086,SC2048 trim_all() { # Usage: trim_all " example string " # Disable globbing to make the word-splitting below safe. set -f # Set the argument list to the word-splitted string. # This removes all leading/trailing white-space and reduces # all instances of multiple spaces to a single (" " -> " "). set -- $* # Print the argument list as a string. printf '%s\n' "$*" # Re-enable globbing. set +f }
Example Usage:
$ trim_all " Hello, World " Hello, World $ name=" John Black is my name. " $ trim_all "$name" John Black is my name.
case $var in *sub_string1*) # Do stuff ;; *sub_string2*) # Do other stuff ;; *) # Else ;; esac
case $var in sub_string1*) # Do stuff ;; sub_string2*) # Do other stuff ;; *) # Else ;; esac
case $var in *sub_string1) # Do stuff ;; *sub_string2) # Do other stuff ;; *) # Else ;; esac
This is an alternative to cut, awk and other tools.
split() { # Disable globbing. # This ensures that the word-splitting is safe. set -f # Store the current value of 'IFS' so we # can restore it later. old_ifs=$IFS # Change the field separator to what we're # splitting on. IFS=$2 # Create an argument list splitting at each # occurance of '$2'. # # This is safe to disable as it just warns against # word-splitting which is the behavior we expect. # shellcheck disable=2086 set -- $1 # Print each list value on its own line. printf '%s\n' "$@" # Restore the value of 'IFS'. IFS=$old_ifs # Re-enable globbing. set +f }
Example Usage:
$ split "apples,oranges,pears,grapes" "," apples oranges pears grapes $ split "1, 2, 3, 4, 5" ", " 1 2 3 4 5
trim_quotes() { # Usage: trim_quotes "string" # Disable globbing. # This makes the word-splitting below safe. set -f # Store the current value of 'IFS' so we # can restore it later. old_ifs=$IFS # Set 'IFS' to ["']. IFS=\"\' # Create an argument list, splitting the # string at ["']. # # Disable this shellcheck error as it only # warns about word-splitting which we expect. # shellcheck disable=2086 set -- $1 # Set 'IFS' to blank to remove spaces left # by the removal of ["']. IFS= # Print the quote-less string. printf '%s\n' "$*" # Restore the value of 'IFS'. IFS=$old_ifs # Re-enable globbing. set +f }
Example Usage:
$ var="'Hello', \"World\"" $ trim_quotes "$var" Hello, World