Вы можете редактировать до первого матча с использованием sed
:
sed -e '1,/pattern/{s/pattern/replace/;}'
В строках 1 до N-1 (где линия N содержит образец), замена ничего не делает; на линии N, это делает реальную работу. После этого вы больше не находитесь в диапазоне строк 1,/pattern/
, поэтому дальнейших преобразований не происходит.
Обратите внимание, что это не работает, если строка 1 соответствует шаблону; он затем вносит изменения в строку 1 и следующую строку, соответствующую шаблону. По крайней мере, с GNU sed
вы можете изменить 1
на 0
, и это работает нормально.
printf "%s\n" pattern pattern pattern pattern |
sed -e '0,/pattern/{s/pattern/replace/;}'
Однако описание говорит «в первые 100 строк» и в то время как линия 1 находится в первых 100 строк, что это не так, как вы обычно описывают его, когда он появляется на линии 1.
Вы можете добавить опцию -i
, чтобы перезаписать исходный файл после его проверки. Остерегайтесь: не все версии sed
поддерживают -i
, а в Mac OS X суффикс резервного копирования является обязательным -i.bak
(но может быть пустым: используйте -i ''
). В отличие от этого, GNU sed
имеет дополнительный суффикс, который должен быть присоединен к опции -i
.Следовательно, -i.bak
работает как с GNU, так и с Mac (BSD) sed
; другое использование опции -i
относится к варианту sed
, который вы используете.
Somehowr related: [Как редактировать текстовый файл 300 ГБ (данные геномики)?] (Http://stackoverflow.com/q/16900721/1983854). – fedorqui
Также несколько сходен [Редактировать огромный файл данных SQL] (http://stackoverflow.com/questions/30727191). Этот файл содержит около 23 гигабайт на машине с 20 ГБ свободного места. –