не понятно что голова -3 *.txt | awk '{напечатать $4}'
возвращается сюда, так как вы не показали нам образцы ваших файлов, однако sed -i 's/GLN/LOO/g' *.txt
заменит все экземпляры GLN в все линии в все файлы, соответствующие *.текст
, если цикл выполняется хотя бы один раз.
AFAIK нет прямого способа решить последнюю н строки файла в sed - поэтому, чтобы использовать это, вам нужно будет вычислить смещение извне, используя туалет -л
и арифметика оболочки, например:
для ф в *.txt; делать
start=$(( $(wc -l <"$f") - 9 ))
sed "$start"',$s/GLN/LOO/g' "$f"
сделано
(я удалил -я
поэтому вывод идет на терминал для тестирования). Вы можете использовать что-то вроде awk 'END{print NR-9}' "$f"
на месте $(( $(wc -l <"$f") - 9 ))
чтобы получить начальное смещение, если вы намеревались использовать awk.
В качестве альтернативы вы можете использовать так
инвертировать файл и сделать замены в первом н линии, затем так
результат - хотя это усложняет замену на месте.
В этой ситуации я, вероятно, потянулся бы к ред.
или же бывший
которые поддерживают смещения числовых адресов, например. тестирование с выводом на терминал:
для ф в *.txt; делать
printf '%s\n' '$-9,$s/GLN/LOO/g' ',p' | ред -с "$f"
сделано
Как только вы будете довольны тем, что все работает правильно, измените ,п
к wq
к жзаписать результат в файл (эквивалент sed -я
).