#! /bin/bash cp $1 $1.bak CLEANVERSION_NAME="$1.clean" # echo $1 # Removing lines that will become completely empty after sed operation # http://soft.zoneo.net/Linux/remove_empty_lines.php # http://www.grymoire.com/Unix/Sed.html#uh-30 sed '/ *# -- Missing translation/d' $1 > $CLEANVERSION_NAME mv $CLEANVERSION_NAME $1 # Now we got rid of all the empty lines created by removing "Missing translation" lines # We remove any lines containing "Missing translation" but also containing other stuff cat $1 | sed -e 's/# -- Missing translation:.*$//' > $CLEANVERSION_NAME # Remove comment of form: #Updated 21-Nov-2011 by # The date can be either 1 or 2 digits. It need not be followed by "by " #cat $CLEANVERSION_NAME | sed -e 's/# Updated \d\d-[a-zA-Z]{3}-\d{4} by.*$//' > $1 #cat $CLEANVERSION_NAME | sed -e 's/ *# Updated .* (by.*)?$//' > $1 cat $CLEANVERSION_NAME | sed -e 's/ *# Updated .[0-9]*\-...\-.....*$//' > $1 # Process gli/help//help.xml files by removing Missing and Updated xml elements: # # cat $1 | sed -e 's@\s*@@' > $CLEANVERSION_NAME # remove empty lines introduced into the file # http://stackoverflow.com/questions/14570489/how-to-remove-blank-lines-from-a-unix-file # Note: need to escape the plus sign (the regex symbol for one or more chars) cat $CLEANVERSION_NAME | sed -e 's@@@' | sed '/^$/d' > $1 # To test if there were ultimately no relevant changes, work on the temporary *.clean file: # remove all lines that are merely empty/spaces # and any lines that are purely comments (though these may start with spaces) # Then test if the *.clean file is non-empty at the end of it # double sed operation to remove all comments and then all empty lines: # http://stackoverflow.com/questions/22080937/bash-skip-blank-lines-when-iterating-through-file-line-by-line #cat $1 | sed -e 's/^\s*(#.*)$//' > $CLEANVERSION_NAME sed -e '/\s*#.*$/d' -e '/^\s*$/d' $1 > $CLEANVERSION_NAME # if the *.clean file is actually empty, print a message # http://www.unix.com/shell-programming-and-scripting/21753-check-if-file-empty.html if [[ ! -s $CLEANVERSION_NAME ]] ; then echo "@@@ $1 only has comments and empty lines/spaces." fi ; rm $CLEANVERSION_NAME echo "**** cleaned version $1" echo "**** pre-cleaned original is in $1.bak"