Go to file
2019-09-19 11:32:20 +03:00
LICENSE.md docs: update 2019-09-19 10:36:16 +03:00
README.md docs: update 2019-09-19 11:32:20 +03:00

pure sh bible

A collection of pure POSIX sh alternatives to external processes

Table of Contents

STRINGS

Strip pattern from start of string

Example Function:

lstrip() {
    # Usage: lstrip "string" "pattern"
    printf '%s\n' "${1##$2}"
}

Example Usage:

$ lstrip "The Quick Brown Fox" "The "
Quick Brown Fox

Strip pattern from end of string

Example Function:

rstrip() {
    # Usage: rstrip "string" "pattern"
    printf '%s\n' "${1%%$2}"
}

Example Usage:

$ rstrip "The Quick Brown Fox" " Fox"
The Quick Brown

Trim all white-space from string and truncate spaces

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.

Example Function:

# shellcheck disable=SC2086,SC2048
trim_all() {
    # Usage: trim_all "   example   string    "
    set -f
    set -- $*
    printf '%s\n' "$*"
    set +f
}

Example Usage:

$ trim_all "    Hello,    World    "
Hello, World

$ name="   John   Black  is     my    name.    "
$ trim_all "$name"
John Black is my name.

Check if string contains a sub-string

Using a case statement:

case $var in
    *sub_string*)
        # Do stuff
    ;;

    *sub_string2*)
        # Do more stuff
    ;;

    *)
        # Else
    ;;
esac

Check if string starts with sub-string

Using a case statement:

case $var in
    sub_string*)
        # Do stuff
    ;;

    sub_string2*)
        # Do more stuff
    ;;

    *)
        # Else
    ;;
esac

Check if string ends with sub-string

Using a case statement:

case $var in
    *sub_string)
        # Do stuff
    ;;

    *sub_string2)
        # Do more stuff
    ;;

    *)
        # Else
    ;;
esac

FILES

Get the first N lines of a file

Alternative to the head command.

Example Function:

head() {
    # Usage: head "n" "file"
    while read -r line; do
        [ "$i" = "$1" ] && break
        printf '%s\n' "$line"
        i=$((i+1))
    done < "$2"
}

Example Usage:

$ head 2 ~/.bashrc
# Prompt
PS1='➜ '

$ head 1 ~/.bashrc
# Prompt

Get the number of lines in a file

Alternative to wc -l.

Example Function:

lines() {
    # Usage: lines "file"
    while read -r _; do
        lines=$((lines+1))
    done < "$1"

    printf '%s\n' "$lines"
}

Example Usage:

$ lines ~/.bashrc
48