Фрагмент Python, который вставляет текст spam
в последнюю позицию во втором -–-последнем %post..%end
блоке:
with open('input') as fp:
lines = fp.readlines()
locs = [i for i, val in enumerate(lines) if val == '%end\n']
lines.insert(locs[-2], 'spam' + '\n')
with open('input', 'w') as fp:
fp.write(''.join(lines))
Учитывая два слова, разделенных пробелом или табуляцией, в каждой строке файла, как во втором примере входного файла:
while read -r word1 word2; do
echo "$word1"
echo "$word2"
done <textfile.txt
Это считывало бы первое слово в каждой строке в $word1
, а остальную часть строки в $word2
.
Ввод для read
задается вводом составной команды while
, которая получает его из файла через перенаправление.
Опция -r
для read
запрещает интерпретировать \
каким-либо особым образом, если этот символ встречается во входных данных.
С одним словом в строке и счетчиком:
counter=0
while read -r word; do
counter=$(( counter + 1 ))
echo "$counter"
echo "$word"
done <textfile.txt
Это будет увеличивать счетчик на единицу в каждой итерации (для каждой строки, считанной изtextfile.txt
).
Чтобы получить нулевой -трехзначный -счетчик, выведите счетчик, используя printf
со строкой форматирования%.3d\n
:
printf '%.3d\n' "$counter"
... вместо echo "$counter"
.
Описание того, что означает %.3d\n
, см. в документации к библиотечной функции C printf
(man 3 printf
, эквивалент оболочки использует в основном ту же строку формата ).