Commit | Line | Data |
---|---|---|
fdf917e1 SBS |
1 | #!/bin/bash |
2 | ||
3 | # Date: 2020-02-15T22:23Z | |
4 | ||
5 | # Author: Steven Baltakatei Sandoval | |
6 | ||
7 | # Description: `bkgettext` prints text between and including two | |
8 | # specified tags. | |
9 | ||
10 | # Usage: | |
11 | # $ bkgettext [ -s tagStart ] [ -e tagEnd ] [ -f file ] | |
12 | ||
13 | echoerr() { echo "$@" 1>&2; } # function for outputing to stderr; see [3] | |
14 | vc() { [ "$OPTION_VERBOSE" == "true" ] && return 0 || return 1; } # returns true if verbose mode active | |
15 | print_help() { echoerr "Usage: [ -s tagStart ] [ -e tagEnd ] [ -f file ] "; } # print help | |
16 | process_inputs() { | |
17 | # echoerr "process_inputs() \$1:""===""$1""===" | |
18 | # echoerr "process_inputs() \$2:""===""$2""===" | |
19 | # echoerr "process_inputs() \$3:""===""$3""===" | |
20 | # echoerr "process_inputs() \$4:""===""$4""===" | |
21 | # echoerr "process_inputs() \$5:""===""$5""===" | |
22 | # echoerr "process_inputs() \$6:""===""$6""===" | |
23 | # echoerr "process_inputs() \$7:""===""$7""===" | |
24 | # echoerr "process_inputs() \$8:""===""$8""===" | |
25 | ||
26 | while getopts "vhs:e:f:" options_array; do | |
27 | case "${options_array}" in | |
28 | v) | |
29 | OPTION_VERBOSE="true" | |
30 | vc && echoerr "DEBUG:Verbose mode active." | |
31 | ;; | |
32 | h) | |
33 | print_help; exit 1 | |
34 | ;; | |
35 | s) | |
36 | tagStart=${OPTARG} | |
37 | vc && echoerr "DEBUG:tagStart:""$tagStart" | |
38 | ;; | |
39 | e) | |
40 | tagEnd=${OPTARG} | |
41 | vc && echoerr "DEBUG:tagEnd:""$tagEnd" | |
42 | ;; | |
43 | f) | |
44 | [ ! -f ${OPTARG} ] && echoerr "ERROR: Invalid file name provided." && exit 1; | |
45 | fileInput=${OPTARG} | |
46 | vc && echoerr "DEBUG:fileInput:""$fileInput" | |
47 | ;; | |
48 | *) | |
49 | echoerr "Error." | |
50 | ;; | |
51 | esac | |
52 | done | |
53 | shift $((OPTIND-1)) | |
54 | } | |
55 | ||
56 | main() { | |
57 | ||
58 | process_inputs "$@" # Define variables: tagStart tagEnd fileInput | |
59 | # echoerr "main() \$1:""===""$1""===" | |
60 | # echoerr "main() \$2:""===""$2""===" | |
61 | # echoerr "main() \$3:""===""$3""===" | |
62 | # echoerr "main() \$4:""===""$4""===" | |
63 | # echoerr "main() \$5:""===""$5""===" | |
64 | # echoerr "main() \$6:""===""$6""===" | |
65 | # echoerr "main() \$7:""===""$7""===" | |
66 | # echoerr "main() \$8:""===""$8""===" | |
67 | # echoerr "main() \$tagStart:""===""$tagStart""===" | |
68 | # echoerr "main() \$tagEnd:""===""$tagEnd""===" | |
69 | # echoerr "main() \$fileInput:""===""$fileInput""===" | |
70 | #OUTPUT=$(cat "$fileInput" | awk "/$tagStart/,/$tagEnd/") # get text between and including tag lines; see [1] | |
71 | #OUTPUT=$(cat "$fileInput" | awk "/$tagStart/{f=1;next} /$tagEnd/{f=0} f") # get text between tag lines; see [1] | |
72 | OUTPUT=$(cat "$fileInput" | awk "/$tagStart/{f=1} /$tagEnd/{f=0;print} f") # get text between and including tag lines; see [1] | |
73 | echo "$OUTPUT" | |
74 | } | |
75 | ||
76 | main "$@" # pass arguments to function "main" and execute "main" (for why `"$@"`, see [2]) | |
77 | exit 0 # exit normally | |
78 | ||
79 | ||
80 | ||
81 | #===References=== | |
82 | # [1]: How to get text between and including specified strings: https://stackoverflow.com/a/22222219 | |
83 | # [2]: How to correctly pass bash script arguments to functions: https://stackoverflow.com/a/8198970 | |
84 | # [3]: How to print text to stderr instead of stdout: https://stackoverflow.com/a/2990533 |