News for hackers. Stuff that matters.
Re:Learn to Process Text in Linux Using Grep, Sed, and Awk by 1vuio0pswjnm7 on Saturday January 07, 2023 @08:22PM (#34294997)
Here are a couple more, edited for HN of course. These are scripts/snippets that would often be used in or by other scripts. Each illustrates some basic quick and dirty usage of tr, sed and grep. These scripts will last for many years with zero "maintenance". They will probably still be working after I have passed away. It seems that python scripts OTOH may have a shelf life.

Task 1: Transform the BIND format of stub resolver output, i.e., the format used by "dig" and many other stub resolvers, to some other format, like HOSTS file, BIND/tinydns zone file, haproxy map file, etc. The input would typically be catenated stub resolver output for hundreds to thousands of domains. The epoch program is three lines of C.

NB. For large input on Linux, dash is significantly faster than bash. I wrote a C program that does the job of this script, faster than dash, and much faster than python. However I still prefer the shell for testing ideas, quickly.

   EPOCH=$(epoch);
   tr -d '\12'|tr ';' '\12' \
   |sed -n '/ANSWER SECTION/{s/ ANSWER SECTION://;
   s/\.[^-0-9a-zA-Z].*IN[^-0-9a-zA-Z]*A[^-0-9a-zA-Z]/ 1 IN A /;
   # list domains to exclude
   /www.google.com/d;
   /^$/d;/^.$/d;p;}' \
   |{
   exec 2>/dev/null 3>&3 4>&4 5>&5 6>&6 7>&7 8>&8 9>&9;
   while read NAME TTL CLASS TYPE IPADDR ;do 
   echo $NAME $TTL $CLASS $TYPE $IPADDR;
   echo $NAME 1 $CLASS $TYPE $IPADDR  >&3;
   echo $NAME $IPADDR  >&4;
   echo $NAME $IPADDR \# $EPOCH >&5;
   echo =$NAME:$IPADDR:1 >&6;
   #_IP_()
   # { 
   # echo $IPADDR|grepcidr -f $1-ips.txt >/dev/null;
   # }
   #_IP_ cloudflare ... 
   #_IP_ aws ...
   #_IP_ cloudfront ...
   #_IP_ fastly ...
   #_IP_ akamai ...
   done;
For example,

    drill example.com|1.sh 3>>1.zone 
    kdig example.com|1.sh 4>>/etc/hosts 
    drill example.com|1.sh 5>>1.map
    kdig example.com|1.sh 6>>data
Task 2: Extract and transform CloudFront domains and their CNAMEs from BIND format stub resolver output to haproxy map format.

    grep -A1 ANSWER.SEC|tr '\11' '\40'|sed -n '/cloudfront.net\.$/{s/\. .* / /;s/\.$//p;}' 
For example,

    drill blogs.aws.amazon.com|2.sh >>2.map

There are no comments on this comment yet.