How to do it...

As with the exercise using Bash only, we are going to perform a similar recipe as follows:

Create a script called some-strs.sh with the following content and open a new terminal:

#!/bin/bash
STR="1234567890asdfghjkl"
echo -n "First character "; sed 's/.//2g' <<< $STR # where N = 2 (N +1)
echo -n "First three characters "; sed 's/.//4g' <<< $STR

echo -n "Third character onwards "; sed -r 's/.{3}//' <<< $STR
echo -n "Forth to sixth character "; sed -r 's/.{3}//;s/.//4g' <<< $STR

echo -n "Last character by itself "; sed 's/.*(.$)/1/' <<< $STR
echo -n "Remove last character only "; sed 's/.$//' <<< $STR

Execute the script and review the results.

Create another script called more-strsng.sh and then execute it:

#!/bin/sh
GB_CSV="testdata/garbage.csv"
EM_CSV="testdata/employees.csv"
# Let's strip the garbage out of the last lines in the CSV called garbage.csv
# Notice the forloop; there is a caveat

set IFS=,
set oldIFS = $IFS
readarray -t ARR < ${GB_CSV}

# How many rows do we have?
ARRY_ELEM=${#ARR[@]}
echo "We have ${ARRY_ELEM} rows in ${GB_CSV}"

# Let's strip the garbage - remove spaces
INC=0
for i in "${ARR[@]}"
do
:
ARR[$INC]=$(echo $i | sed 's/ //g')
echo "${ARR[$INC]}"
INC=$[$INC+1]
done

# Remove the last character and make ALL upper case
INC=0
for i in "${ARR[@]}"
do
:
ARR[$INC]=$(echo $i | sed 's/.$//' | sed -e 's/.*/U&/' )
echo "${ARR[$INC]}"
INC=$[$INC+1]
done


We want to add a # at the beginning of each line and we will also use the sed tool on a per file basis. We just want to strip Bob out and change his name to Robert by manipulating the file in-place:

set IFS=,
set oldIFS = $IFS
readarray -t ARR < ${EM_CSV}

INC=0
for i in "${ARR[@]}"
do
:
ARR[$INC]=$(sed -e 's/^/#/' <<< $i )
echo "${ARR[$INC]}"
INC=$[$INC+1]
done

sed -i 's/Bob/Robert/' ${EM_CSV}
sed -i 's/^/#/' ${EM_CSV} # In place, instead of on the data in the array
cat ${EM_CSV}
# Now lets remove the birthdate field from the files
# Starts to get more complex, but is done without a loop or using cut
awk 'BEGIN { FS=","; OFS="," } {$5="";gsub(",+",",",$0)}1' OFS=, ${EM_CSV}

Examine the resultswas it simpler to get the results to the recipes that leverage only bash built-in constructs? Likely yes in many situations, IF they are available.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.221.58.143