Как я удаляю первые n строки файла ASCII с помощью команд оболочки?

Альтернатива должна иметь подключение программы к другому X-серверу. Вы можете также

  1. выполните отдельный экземпляр X на другой виртуальной консоли. Переключатель с, например, Ctrl-alt-F8.
  2. выполните Xnest, чтобы иметь X-сервер, действующий как клиент к основному Xserver

Так или иначе Ваш сценарий тестирования должен ДИСПЛЕЙ АППАРАТА для перенаправления программы к другому X-серверу (это, вероятно, назовут:1).

101
03.05.2012, 04:07
5 ответов

Пока файл не является символьной ссылкой или hardlink, можно использовать sed, хвост или awk. Пример ниже.

$ cat t.txt
12
34
56
78
90

sed

$ sed -e '1,3d' < t.txt
78
90

Можно также использовать sed оперативный без временного файла: sed -i -e 1,3d yourfile. Это ничего не повторит, это просто изменит оперативный файл. Если Вы не должны передавать результат по каналу к другой команде, это легче.

хвост

$ tail -n +4 t.txt
78
90

awk

$ awk 'NR > 3 { print }' < t.txt
78
90
155
27.01.2020, 19:30
  • 1
    Можно также использовать sed оперативный без временного файла: sed -i -e 1,3d yourfile. Это ничего не повторит, это просто изменит оперативный файл. Если Вы не должны передавать результат по каналу к другой команде, это легче. –  Yanick Girouard 03.05.2012, 02:46
  • 2
    Спасибо @YanickGirouard, @IgnacioVazquezAbrams! Вы два только что сохранили меня тонна физического труда на моем исследовании! :) –  Paul 06.09.2012, 08:22
  • 3
    @Svetlana sed -i конкретно. Большинство реализаций просто удаляет файл и заменяет его новым, который не работает на ссылки, так как Вы заканчиваете тем, что оставили оригинал в его другом местоположении. –  jw013 08.01.2014, 00:21
  • 4
    как насчет того, чтобы объяснить, что '1,3-й', +4, et.c. средства? Вопрос был для n строк, но Вы не сказали то, что n (как, по-видимому, n 2 в Ваших примерах, хотя не очевидно для новичка, что измениться для изменения n), –  Robin Manoli 01.02.2015, 12:29
  • 5
    Это использует временный файл, таким образом, не очень полезный для 100% util дисковое пространство. Было бы интересно иметь решение, которое делает это буквально "оперативное". –  Shai 03.09.2016, 00:09

Если сведенные в таблицу строки - те, которые имеют символ табуляции:

grep '␉' <input_file >output_file

( будучи литеральным символом табуляции) или эквивалентно

sed -n '/␉/p' <input_file >output_file

В bash/ksh/zsh сценарии можно записать $'\t' для вкладки, например. grep $'\t' или sed -n $'/\t/p'.

Если Вы хотите устранить 10 строк в начале файла:

tail -n +11 <input_file >output_file

(обратите внимание, что это +11 устранить 10 строк, потому что +11 означает, “начинают со строки 11” и строк бортовых номеров от 1) или

sed '1,10d' <input_file >output_file

На Linux можно использовать в своих интересах sed's GNU -i опция изменить файлы на месте:

sed -i -n '/\t/p' *.txt

Или можно использовать цикл оболочки и временные файлы:

for x in *.txt; do
  tail -n +11 <"$x" >"$x.tmp"
  mv "$x.tmp" "$x"
done

Или если Вы не хотите изменять файлы на месте, но вместо этого давать им другое имя:

for x in *.txt; do
  tail -n +11 <"$x" >"${x%.txt}.data"
done
6
27.01.2020, 19:30
  • 1
    , "сводимый в таблицу" обычно, означает "довольно распечатанный в таблице", не "расположенный с отступом с символами табуляции". –  Ignacio Vazquez-Abrams 03.05.2012, 05:14
  • 2
    , "сводимый в таблицу" обычно, означает "довольно распечатанный в таблице", не "расположенный с отступом с символами табуляции". –  Ignacio Vazquez-Abrams 03.05.2012, 05:14
  • 3
    @IgnacioVazquez-Abrams я знаю. Довольно распечатанная таблица иногда использует символы табуляции, это легче определить, чем выровненные столбцы. Конечно, если бы Paul дал демонстрационный вход, то я мог бы дать лучший matcher. –  Gilles 'SO- stop being evil' 03.05.2012, 13:04

Вы можете использовать Vim в режиме Ex:

ex -sc '1d5|x' file
  1. 1 перейти к первой строке

  2. 5 выбрать 5 строк

  3. d удалить

  4. x сохранить и закрыть

2
27.01.2020, 19:30
# deletes first line
echo "a\nb" | sed '1d' 

# read list.txt and write list.csv without first line
cat list.txt | sed '1d' > list.csv 

Другие полезные команды:

# finds first character (pipe|)
grep '^|' 

# deletes pipe
sed 's/|//g'  

# deletes space
sed 's/ //g' 
0
27.01.2020, 19:30

В процентах

Использование bashдля очистки файла с использованием процентного числа вместо абсолютного числа строк:

sed -i -e 1,$( printf  "$((`cat php_errors.log | wc -l` * 75 /100 ))" )d php_errors.log

Остерегайтесь, потому что эта команда может быть разрушительной, поскольку она удаляет содержимое в -месте без создания копии.

Удаляет первые 75% строк из указанного файла.

1
27.01.2020, 19:30

Теги

Похожие вопросы