Вывести на стандартный вывод все содержимое файла 1 txt, кроме первой строки

Обновлено: 30.06.2024

Примечание. Эта команда на самом деле не изменяет входной файл, т. е. file.txt.

Функция сортировки с файлом микширования, т. е. с прописными и строчными буквами: если у нас есть файл микширования с буквами как в верхнем, так и в нижнем регистре, то сначала буквы в верхнем регистре будут отсортированы, а затем буквы в нижнем регистре.

Пример:

Создайте файл mix.txt

Теперь используйте команду сортировки

Параметры с функцией сортировки:

<р>1. Опция -o: Unix также предоставляет нам специальные средства, например, если вы хотите записать вывод в новый файл, output.txt, перенаправляет вывод таким образом, или вы также можете использовать встроенную опцию сортировки -o, которая позволяет вам указать выходной файл.

Использование параметра -o функционально аналогично перенаправлению вывода в файл.

Примечание. Ни один из них не имеет преимущества перед другим.

Пример: входной файл такой же, как указано выше.

Синтаксис:

<р>2. Опция -r: сортировка в обратном порядке: вы можете выполнить сортировку в обратном порядке, используя флаг -r. флаг -r является опцией команды sort, которая сортирует входной файл в обратном порядке, то есть по убыванию по умолчанию.

Пример: входной файл такой же, как указано выше.

Синтаксис:

<р>3. Опция -n: для сортировки файла по числовому номеру используется опция –n. Параметр -n также предопределен в Unix, как и указанные выше параметры. Эта опция используется для сортировки файла с числовыми данными внутри.

Пример:

Давайте рассмотрим файл с номерами:

Синтаксис:

<р>4. Опция -nr: чтобы отсортировать файл с числовыми данными в обратном порядке, мы можем использовать комбинацию двух опций, как указано ниже.

Пример: числовой файл такой же, как и выше.

Синтаксис:

<р>5. Опция -k: Unix предоставляет возможность сортировки таблицы на основе любого номера столбца с помощью опции -k.

Используйте параметр -k для сортировки по определенному столбцу. Например, используйте «-k 2» для сортировки по второму столбцу.

Пример:

Давайте создадим таблицу с двумя столбцами

Синтаксис:

<р>6. Опция -c: эта опция используется для проверки того, отсортирован ли уже данный файл или нет, и проверяет, отсортирован ли уже файл, передайте опцию -c для сортировки. Это запишет в стандартный вывод, если есть строки, которые не по порядку. Инструмент сортировки можно использовать, чтобы понять, отсортирован ли этот файл и какие строки не по порядку

Пример:

Предположим, существует файл cars.txt со списком автомобилей.

Синтаксис:

<р>7. Опция -u: чтобы отсортировать и удалить дубликаты, передайте опцию -u для сортировки. Это запишет отсортированный список в стандартный вывод и удалит дубликаты.
Этот параметр полезен, так как удаляемые дубликаты дают нам избыточный файл.

Пример. Предположим, существует файл со списком автомобилей с именем cars.txt.

Синтаксис:

<р>8. Опция -M: для сортировки по месяцам передайте опцию -M для сортировки. Это запишет отсортированный список в стандартный вывод, упорядоченный по названию месяца.

Есть ли простой способ повторить файл, пропуская первую и последнюю строки? Я смотрел на трубопровод от головы к хвосту, но для тех, кто кажется, что мне нужно знать общее количество линий с самого начала. Я также смотрел на split , но я тоже не вижу способа сделать это с этим.

5 ответов 5

Только с sed , без каналов :

ПРИМЕЧАНИЕ

  • 1 – первая строка
  • d означает удалить
  • <ли>; разделитель для двух команд
  • $ означает последнюю строку


Вам не нужно заранее знать количество строк. tail и head могут иметь смещение от начала или конца файла соответственно.

Этот конвейер начинается со второй строки файла (пропуская первую строку) и останавливается на предпоследней (пропуская последнюю строку). Чтобы пропустить более одной строки в начале или в конце, измените числа соответствующим образом.

если сделать наоборот, то, конечно же, получится то же самое:


Не знаю почему, но head -n -1 удаляет первую И последнюю строку моего TXT-файла в Ubuntu 14.04.2LTS.

Вот как это сделать с помощью awk:

Еще один способ для sed:

x — расширенная команда sed, она переключает текущую строку на предыдущую: текущая идет в буфер, а предыдущая — на экран и так далее, пока sed обрабатывает поток построчно (поэтому первая строка будет пустой) .

awk решение на каждом шаге (строке) помещает текущую строку в переменную и начинает ее печатать только после прохождения второй строки. Таким образом, мы получили набитую последовательность строк на экране от предпоследней до предпоследней. Последняя строка опущена, потому что она находится в переменной и должна быть напечатана только на следующем шаге, но все шаги уже закончились и мы никогда не видим строку на экране.

Та же идея в perl:

$. обозначает номер строки и $_ для текущей строки.
perl -n — это сокращение для структуры while(), а -e — для встроенного скрипта.

Утилита сортировки файлов, часто используемая в качестве фильтра в конвейере. Эта команда сортирует текстовый поток или файл вперед или назад или в соответствии с различными клавишами или позициями символов. Используя параметр -m, он объединяет предварительно отсортированные входные файлы. На информационной странице перечислены его многочисленные возможности и параметры. См. пример 11-10, пример 11-11 и пример A-8.

Топологическая сортировка, чтение пар строк, разделенных пробелами, и сортировка в соответствии с входными шаблонами. Первоначальной целью tsort была сортировка списка зависимостей для устаревшей версии компоновщика ld в «древней» версии UNIX.

Результаты tsort обычно заметно отличаются от результатов стандартной команды sort, описанной выше.

Этот фильтр удаляет повторяющиеся строки из отсортированного файла. Его часто можно увидеть в конвейере в сочетании с sort .

Полезная опция -c ставит перед каждой строкой входного файла ее количество вхождений.

bash$ cat testfile Эта строка встречается только один раз. Эта строка встречается дважды. Эта строка встречается дважды. Эта строка встречается три раза. Эта строка встречается три раза. Эта строка встречается три раза. bash$ uniq -c testfile 1 Эта строка встречается только один раз. 2 Эта строка встречается дважды. 3 Эта строка встречается три раза. bash$ сортировать тестовый файл | уникальный -c | sort -nr 3 Эта строка встречается три раза. 2 Эта строка встречается дважды. 1 Эта строка встречается только один раз.

Сортировка INPUTFILE | уникальный -c | Командная строка sort -nr создает список частот появления в файле INPUTFILE (параметры -nr для sort вызывают обратную числовую сортировку). Этот шаблон находит применение при анализе файлов журналов и списков словарей, а также везде, где необходимо изучить лексическую структуру документа.

Пример 16-12. Частотный анализ слов

bash$ cat testfile Эта строка встречается только один раз. Эта строка встречается дважды. Эта строка встречается дважды. Эта строка встречается три раза. Эта строка встречается три раза. Эта строка встречается три раза. bash$ ./wf.sh тестовый файл 6 это 6 встречается 6 строка 3 раза 3 три 2 дважды 1 только 1 один раз

Фильтр расширения преобразует табуляцию в пробелы. Он часто используется в пайпе .

Неразвернутый фильтр преобразует пробелы во вкладки. Это отменяет эффект расширения .

Использование cut для получения списка смонтированных файловых систем:

вырезать -d ' ' -f1,2 /etc/mtab

имя -a | вырезать -d" " -f1,3,11,12

Использование cut для извлечения заголовков сообщений из папки электронной почты:

cut -d ' ' -f2,3 имя файла эквивалентно awk -F'[ ]' '< print $2, $3 >' имя файла

В качестве разделителя можно даже указать перевод строки. Хитрость заключается в том, чтобы фактически встроить перевод строки ( RETURN ) в последовательность команд.

bash$ cut -d' ' -f3,7,19 testfile Это строка 3 тестового файла. Это строка 7 тестового файла. Это строка 19 тестового файла.

Спасибо, Яка Кранич, за указание на это.

Инструмент для объединения разных файлов в один файл с несколькими столбцами. В сочетании с cut полезно для создания файлов системного журнала.

bash$ предметы для кошек алфавитные блоки строительные блоки кабели bash$ цены для кошек 1,00 долл. США за дюжину 2,50 долл. США за штуку. $3,75 bash$ Цены на вставки блоков с алфавитом $1,00/дюжина строительных блоков $2,50 за штуку. кабели 3,75 долл. США

Считайте, что это родственница пасты специального назначения . Эта мощная утилита позволяет осмысленно объединять два файла, что по существу создает простую версию реляционной базы данных.

Файл: 1.data 100 туфель, 200 шнурков, 300 носков

Файл: 2.data 100 40,00 $ 200 1,00 $ 300 2,00 $

bash$ join 1.data 2.data File: 1.data 2.data 100 туфель 40 долларов США 200 шнурков 1 доллара США 300 носков 2 доллара США

Поле с тегом появляется в выходных данных только один раз.

выводит начало файла на стандартный вывод. По умолчанию 10 строк, но можно указать другое количество. Команда имеет ряд интересных опций.

Пример 16-13. Какие файлы являются скриптами?

Пример 16-14. Генерация 10-значных случайных чисел

выводит (хвост) конец файла на стандартный вывод. По умолчанию это 10 строк, но это можно изменить с помощью опции -n. Обычно используется для отслеживания изменений в файле системного журнала с использованием параметра -f, который выводит строки, добавленные к файлу.

Пример 16-15. Использование tail для мониторинга системного журнала

Чтобы установить переменную в данный блок текстового файла:

В более новых реализациях tail старое использование имени файла tail -$LINES не рекомендуется. Стандартное имя файла tail -n $LINES верно.

шаблон grep [ файл . ]

Поиск в целевом файле (файлах) вхождения шаблона , где шаблон может быть буквальным текстом или регулярным выражением.

bash$ grep '[rst]ystem.$' osinfo.txt Лицензия GPL регулирует распространение операционной системы Linux.

Если целевые файлы не указаны, grep работает как фильтр для stdout , как в канале .

bash$ ps топор | часы grep 765 tty1 S 0:00 xclock 901 pts/1 S 0:00 часы grep

Опция -i приводит к поиску без учета регистра.

Опция -w соответствует только целым словам.

Опция -l показывает только те файлы, в которых были найдены совпадения, но не совпадающие строки.

Опция -r (рекурсивная) ищет файлы в текущем рабочем каталоге и во всех подкаталогах ниже него.

Опция -n выводит список совпадающих строк вместе с номерами строк.

bash$ grep -n Linux osinfo.txt 2: Это файл, содержащий информацию о Linux. 6: GPL регулирует распространение операционной системы Linux.

Опция -c ( --count ) дает числовое количество совпадений, а не их список.

Опция --color (или --color ) помечает совпадающую строку цветом (на консоли или в окне xterm). Так как grep выводит всю строку, содержащую шаблон соответствия, это позволяет вам точно увидеть, что сопоставляется. См. также параметр -o, который показывает только совпадающую часть строки (строк).

Пример 16-16. Распечатка строк From в сохраненных сообщениях электронной почты

При вызове с более чем одним заданным целевым файлом grep указывает, какой файл содержит совпадения.

bash$ grep Linux osinfo.txt misc.txt osinfo.txt:Это файл, содержащий информацию о Linux. osinfo.txt: GPL регулирует распространение операционной системы Linux. misc.txt:Операционная система Linux неуклонно набирает популярность.

Чтобы заставить grep отображать имя файла при поиске только одного целевого файла, просто укажите /dev/null в качестве второго файла.

bash$ grep Linux osinfo.txt /dev/null osinfo.txt:Это файл, содержащий информацию о Linux. osinfo.txt: GPL регулирует распространение операционной системы Linux.

Пример 16-17. Эмуляция grep в скрипте

Как grep может искать два (или более) отдельных шаблона? Что делать, если вы хотите, чтобы grep отображал все строки в файле или файлах, содержащих как «шаблон1», так и «шаблон2»?

Например, для следующего файла:

Теперь давайте найдем в этом файле строки, содержащие как «файл», так и «текст». . .

Теперь интересное использование grep для развлечения. . .

Пример 16-18. Решение кроссвордов

bash $ egrep 'matches|Matches' file.txt Строка 1 соответствует. Линия 3 соответствует. Строка 4 содержит совпадения, а также совпадения

В некоторых дистрибутивах Linux egrep и fgrep являются символическими ссылками или псевдонимами для grep , но вызываются с параметрами -E и -F соответственно.

Пример 16-19. Поиск определений в Словаре Вебстера 1913 года

agrep ( приблизительное соответствие grep ) расширяет возможности grep до приблизительного соответствия. Строка поиска может отличаться от полученных совпадений на заданное количество символов. Эта утилита не является частью основного дистрибутива Linux.

Для поиска сжатых файлов используйте zgrep , zegrep или zfgrep . Они также работают с несжатыми файлами, хотя и медленнее, чем обычные grep, egrep, fgrep. Они удобны для поиска в смешанном наборе файлов, некоторые из которых сжаты, а некоторые нет.

Команда look работает так же, как grep , но выполняет поиск в "словаре", отсортированном списке слов. По умолчанию поиск ищет совпадения в /usr/dict/words , но может быть указан другой файл словаря.

Пример 16-20. Проверка слов в списке на достоверность

Языки сценариев, особенно подходящие для анализа текстовых файлов и вывода команд. Могут быть встроены по отдельности или в комбинации в конвейеры и сценарии оболочки.

Неинтерактивный «редактор потока», позволяющий использовать многие ex-команды в пакетном режиме. Он находит множество применений в сценариях оболочки.

Программируемое средство извлечения и форматирования файлов, подходящее для манипулирования и/или извлечения полей (столбцов) в структурированных текстовых файлах. Его синтаксис похож на C.

bash $ wc /usr/share/doc/sed-4.1.2/README 13 70 447 README [13 строк 70 слов 447 символов]

wc -w дает только количество слов.

wc -l дает только количество строк.

wc -c дает только количество байтов.

wc -m дает только количество символов.

wc -L дает только длину самой длинной строки.

Использование wc для подсчета количества файлов .txt в текущем рабочем каталоге:

Использование команды wc для суммирования размера всех файлов, имена которых начинаются с букв в диапазоне от d до h

bash$ wc [d-h]* | общее количество | авк '' 71832

Использование wc для подсчета слов "Linux" в основном исходном файле этой книги.

bash$ grep Linux abs-book.sgml | туалет -l 138

Некоторые команды включают некоторые функции wc в виде опций.

фильтр перевода символов.

Либо tr "A-Z" "*", либо tr A-Z \* изменяет все прописные буквы в имени файла на звездочки (записывает в stdout ). В некоторых системах это может не работать, но tr A-Z '[**]' сработает.

Опция --squeeze-repeats (или -s ) удаляет все, кроме первого экземпляра строки последовательных символов. Эта опция полезна для удаления лишних пробелов.

bash$ эхо "XXXXX" | tr --squeeze-repeats 'X' X

Опция -c "дополнение" инвертирует набор символов для соответствия. С этой опцией tr действует только на те символы, которые не соответствуют указанному набору.

bash$ echo "acfdeb123" | tr -c b-d + +c+d+b++++

bash$ echo "abcd2ef1" | tr '[:alpha:]' - ----2--1

Пример 16-21. toupper : преобразует файл в верхний регистр.

Пример 16-22. нижний регистр : изменяет все имена файлов в рабочем каталоге на нижний регистр.

Пример 16-23. du : Преобразование текстовых файлов DOS в UNIX.

Пример 16-24. rot13 : сверхслабое шифрование.

Пример 16-25. Генерация головоломок «Крипто-цитата»

У утилиты tr есть два исторических варианта. Версия BSD не использует скобки ( tr a-z A-Z ), а версия SysV использует ( tr '[a-z]' '[A-Z]' ). Версия tr GNU похожа на версию BSD.

Фильтр, который переносит строки ввода до заданной ширины. Это особенно полезно с параметром -s, который разрывает строки по пробелам слов (см. пример 16-26 и пример A-1).

Простое средство форматирования файлов, используемое в качестве фильтра в канале для "переноса" длинных строк вывода текста.

Пример 16–26. Отформатированный список файлов.

Этот фильтр с обманчивым названием удаляет обратные переводы строки из входного потока. Он также пытается заменить пробел эквивалентными вкладками. В основном col используется для фильтрации вывода некоторых утилит обработки текста, таких как groff и tbl .

Формат столбца. Этот фильтр преобразует текстовый вывод в виде списка в «красивую» таблицу, вставляя вкладки в соответствующих местах.

Пример 16-27. Использование столбца для форматирования списка каталогов

Фильтр удаления столбцов. Это удаляет столбцы (символы) из файла и записывает файл, в котором отсутствует диапазон указанных столбцов, обратно в stdout . colrm 2 4 удаляет символы со второго по четвертый из каждой строки имени файла текстового файла.

Если файл содержит табуляцию или непечатаемые символы, это может привести к непредсказуемому поведению. В таких случаях рассмотрите возможность использования expand и unexpand в канале, предшествующем colrm .

Фильтр нумерации строк: nl имя файла выводит имя файла на стандартный вывод, но вставляет последовательные числа в начале каждой непустой строки. Если имя файла не указано, работает со стандартным вводом.

Вывод nl очень похож на cat -b , поскольку по умолчанию nl не отображает пустые строки.

Пример 16-28. nl : скрипт с самонумерацией.

Фильтр форматирования печати. Это разбивает файлы (или stdout ) на разделы, подходящие для печати или просмотра на экране. Различные параметры позволяют манипулировать строками и столбцами, соединять строки, устанавливать поля, нумеровать строки, добавлять заголовки страниц и объединять файлы, среди прочего. Команда pr сочетает в себе большую часть функций nl, вставки, сворачивания, столбца и расширения.

pr -o 5 --width=65 fileZZZ | more выводит на экран хороший список файлов ZZZ с разбивкой на страницы с полями, установленными на 5 и 65.

Особенно полезная опция -d , заставляющая использовать двойной интервал (тот же эффект, что и sed -G ).

Программа gettext работает со сценариями оболочки. См. информационную страницу .

Программа для создания двоичных каталогов сообщений. Он используется для локализации .

Утилита для преобразования файлов в другую кодировку (набор символов). В основном он используется для локализации.

Считайте это более сложной версией iconv, приведенной выше. Это очень универсальная утилита для преобразования файла в другую схему кодирования. Обратите внимание, что recode не является частью стандартной установки Linux.

TeX и Postscript — это языки разметки текста, используемые для подготовки копии к печати или форматированного отображения видео.

TeX – это разработанная Дональдом Кнутом сложная система набора текста. Часто удобно написать сценарий оболочки, инкапсулирующий все параметры и аргументы, передаваемые одному из этих языков разметки.

Ghostscript ( gs ) – это интерпретатор Postscript под лицензией GPL.

Утилита для обработки файлов TeX и pdf. Найденный в /usr/bin во многих дистрибутивах Linux, он на самом деле представляет собой оболочку оболочки, которая вызывает Perl для вызова Tex.

Утилита для преобразования обычного текстового файла в формат PostScript

Например, enscript имя_файла.txt -p имя_файла.ps создает выходной файл PostScript имя_файла.ps .

Еще один язык разметки текста и форматирования отображения — groff . Это расширенная версия GNU почтенного UNIX-пакета отображения и набора текста roff/troff. Man-страницы используют groff .

Утилита обработки таблиц tbl считается частью groff , поскольку ее функция заключается в преобразовании разметки таблицы в команды groff.

Утилита обработки уравнений eqn также является частью groff , и ее функция заключается в преобразовании разметки уравнения в команды groff.

Пример 16-29. manview : просмотр отформатированных справочных страниц

Лексический анализатор lex создает программы для сопоставления с образцом. В системах Linux он был заменен непатентованным flex.

Утилита yacc создает анализатор на основе набора спецификаций. Он был заменен непатентованным bison в системах Linux.

Примечания [1]

Это относится только к GNU-версии tr , а не к универсальной версии, часто используемой в коммерческих системах UNIX.

Управление текстом с помощью sed и grep

В предыдущей статье я рассказал, как работать с текстом с помощью grep . Теперь обратите внимание на sed (редактор потока), который лучше всего подходит для использования в конвейерах (данные, поступающие из канала). Утилиту sed можно использовать для печати содержимого файла, замены строки (или нескольких строк) и последующего сохранения файла. В отличие от grep , sed может заменить строку или несколько строк в файле и выполнить обновление на месте этого файла.

Самый простой вызов sed при замене foo на bar:

Пример: удаление комментариев

Дополнительные ресурсы по Linux

Хотя grep может форматировать вывод на экран, он не может изменить файл на месте. Для этого вам понадобится редактор файлов, например ed. Поскольку ed не является частью этой статьи, используйте sed, чтобы добиться того же, что вы сделали с grep в первом примере предыдущей статьи. На этот раз измените файл /etc/fstab на месте, передав флаг -i в sed. Без флага -i вы бы увидели только то, что было бы изменено.

Рекомендуется всегда запускать sed без флага -i, просто чтобы убедиться, что полученный результат является ожидаемым. Утилита sed также предлагает флаг -i.bak, который создает файл резервной копии перед редактированием.

Последняя команда grep для этого примера:

С sed у вас есть:

Пример: Печатать только пользователей /etc/passwd

В примере grep вы напечатали только имена пользователей из файла /etc/passwd со следующим:

То же самое можно сделать с помощью sed следующим образом:

В приведенном выше примере вы группируете соответствие скобками () , а затем печатаете совпадающую группу с \1 (обратная ссылка), которая определяет первую группу. Для второй группы вы должны использовать \2 и т. д.

Пример: заменить все foo на bar

В sed можно выполнить поиск по шаблону, а затем заменить только вхождение, соответствующее шаблону. Чтобы глобально заменить все вхождения в файле inputfile1 с foo на bar, выполните:

Пример: замена одного экземпляра

Возьмите файл inputfile2 со следующим содержимым:

Скажите, что вы хотите заменить should на will , но только во второй строке. Эта команда выглядит следующим образом:

Этот вывод отправляется на стандартный вывод, а не заменяет содержимое файла. Результат выглядит следующим образом:

Команда sed чувствительна к регистру. Следующее не будет работать, если вы попытаетесь заменить World на there :

GNU sed представил новый флаг /I , который игнорирует регистр и будет выполнять замену той же командой:

Пример: напечатать диапазон строк и выйти

С помощью sed вы также можете распечатать строки и выйти после того, как ваши критерии будут выполнены. Следующие команды напечатают три строки и завершат работу. Эта команда:

эквивалентно:

Следующее было бы неправильно:

Пример: закомментировать незакомментированные строки

Регулярные выражения также можно использовать с sed , как показано ранее. Например, у вас есть следующий небольшой скрипт:

В sed вы можете использовать что-то вроде следующего:

В приведенной выше команде выполняется следующее:

Пример: удалить все цифры

Разные приложения генерируют данные в разных форматах. С sed вы можете хранить только те данные, которые можете использовать. Например, у вас есть следующий файл ( inputfile3 ) в этом формате:

Возможно, программа сгенерировала неправильный формат или объединила поля в одно. Что, если вы заинтересованы только в сохранении буквенных символов и хотите отказаться от цифр? Как бы вы достигли этой цели с помощью sed ?

Ответ, вероятно, проще, чем вы думаете:

Пример: изменение определенных строк

Кроме того, sed также может обрабатывать диапазоны по шаблону, что означает, что вы можете указать начальную и конечную строку и манипулировать диапазоном. Например:

Следующая команда sed будет комментировать строки, начинающиеся с start и заканчивающиеся end:

Также избавьтесь от пустых строк.

В sed есть много других возможностей. Чтобы в полной мере использовать возможности sed, ознакомьтесь с его страницей документации, которую вы можете найти здесь. Кроме того, здесь можно найти отличный источник информации о sed.

Подведение итогов

Как я уже говорил ранее, вы будете использовать grep, когда хотите рекурсивно искать шаблон в файле или нескольких каталогах. Используйте sed, если вы получаете данные из конвейера или хотите манипулировать данными на лету.

Команда sed написана по сценарию, и ее легко научиться выполнять основные операции.Все, что вам нужно, это практика, особенно с регулярными выражениями.

Читайте также: