2012-05-05 3 views
49

Я пытаюсь удалить первые две строки и последние четыре строки из моих текстовых файлов. Как я могу сделать это с Bash?Как удалить первые две строки и последние четыре строки из текстового файла с помощью bash?

+0

Следующее может помочь при удалении строки в конце файла: [http://stackoverflow.com/questions/4881930/bash -remove-the-last-line-from-a-file] (http://stackoverflow.com/questions/4881930/bash-remove-the-last-line-from-a-file) – Linger

ответ

72

Вы можете комбинировать tail и head:

$ tail -n +3 file.txt | head -n -4 > file.txt.new && mv file.txt.new file.txt 
+10

+1 для не использования 'cat'. –

+0

Большое спасибо. – rebca

+1

Обратите внимание, что из Git Bash под Windows 'tail -n + 3' работает, но' head -n -4' сообщает 'invalid number of lines'. Похоже на ошибку (возможно, используется старая версия 'head'). –

16

Голова и хвост

cat input.txt | tail -n +3 | head -n -4 

Sed Решение

cat input.txt | sed '1,2d' | sed -n -e :a -e '1,4!{P;N;D;};N;ba' 
+4

Вам не нужно использовать 'cat':' tail -n +3 input.txt | ... 'отлично работает (и то же самое для' sed'). – huon

+0

... Спасибо ... :) – Debaditya

+3

Спасибо за решение sed; Я нуждался в нем на машине, которая не допускает отрицательных номеров строк для головы. (Кстати, 4 в первой команде следует отменить.) – eswald

2

Вы можете позвонить ex-редактор из командной строки bash, используя следующий пример. Обратите внимание, что он использует here document, чтобы завершить список команд ex.

ex text.file << EOF 
1,2d 
$ 
-3,.d 
x 
EOF 
7

Это самый быстрый способ я нашел:

sed -i 1,2d filename 
+0

-i неверно –

+0

'-i extension Редактировать файлы на месте, сохраняя резервные копии с указанным расширением. Если задано расширение с нулевой длиной, резервная копия не будет сохранена. Не рекомендуется давать расширение длины при редактировании файлов на месте, поскольку вы рискуете повреждением или частичным контентом в ситуациях, когда дисковое пространство исчерпано и т. Д. – finferflu

+0

Вот что говорит документация, по крайней мере, реализация sed на моей системе ... – finferflu

Смежные вопросы