У меня есть простой bash-скрипт с именем print_code.sh , который берет имя файла и распечатывает файл с номерами строк.
Вот оно:
FILE=$1
line=0;
numLines=`wc -l $FILE | sed 's/ .*$//'`
digits=`echo "l($numLines)/l(10)+1" | bc -l`
digits=`echo "0$digits" | sed 's/\..*$//'`
for i in `cat $FILE | sed 's/ /_=SPACE=_/g'`; do
line=`echo $line + 1 | bc`;
i=`echo $i | sed 's/_=SPACE=_/ /g'`;
printf "%${digits}d | %s\n" $line "$i"
done
Вот глупый исходный файл на воображаемом языке:
var x = 1
var y = 2
var z = 3
func dostuff {
var a
var b
x = x + 1
y = y + 1
z = z + 1
a = x + y + z
b = a
}
Вот вывод с номерами строк:
01 | var x = 1
02 | var y = 2
03 | var z = 3
04 | func dostuff {
05 | var a
06 | var b
07 | x = x + 1
08 | y = y + 1
09 | z = z + 1
10 | a = x + y + z
11 | b = a
12 | }
Есть (как минимум) две функциональные проблемы с print_code.sh :
- Любые пустые строки будут игнорироваться - что приведет к нарушению нумерации
- Если исходный файл содержит вкладки, символ вкладки будет обрабатываться как символ новой строки
Кроме того, местами он хакерский, потому что я не очень хорошо знаю bash - особенно заменив символ пробела заполнителем = SPACE = , поэтому мы можем перебирать каждую строку, используя для .
Как лучше всего очистить этот код, чтобы он не был таким хакерским, и чтобы вышеуказанные функциональные проблемы исчезли?
Есть ли другие функциональные проблемы, которые я пропустил?