bash-scan-text-block-reverse

bash-scan-text-block-reverse

example finding a block.

start string and reverse search up to next string. then replacing a line inside the block

bash example

$ cat listener-update.sh 
#!/bin/bash
#v0.9.1
file="listener_test.yml"
dir="./unregister"
variable="bar"

codeuri_num=$(grep -n "CodeUri: $dir" $file | awk '{print $1}' FS=":")
function_num=$(grep -n "Type: 'AWS::Serverless::Function'" $file | awk '{print $1}' FS=":")
block=$(sed "${function_num},${codeuri_num}!d" $file)

echo
if [[ "$block" == *"AutoPublishCodeSha256"* ]];then
  echo "found AutoPublishCodeSha256 so update"
  line=$(echo "${block}" | grep -n "AutoPublishCodeSha256")
  line_num=$(awk "/Auto/ && NR >= ${function_num} && NR <= ${codeuri_num} {print NR}" $file)
  newline="AutoPublishCodeSha256: $var"
  sed -i "${line_num}s/.*/ \ \ \ \ \ AutoPublishCodeSha256: $variable/" $file
else
  echo "AutoPublishCodeSha256 not found so insert"
  #codeuri_num=$((codeuri_num+1))
  sed -i "${codeuri_num} i \ \ \ \ \ \ AutoPublishCodeSha256: $variable" $file
fi