Как отобразить всю строку текста?

Пример моей информации:

Fruit,Quantity:Cost,Sold Red Apple,10,1,5 Green Apple,10,2,20 Orange,20,1,10 

Вот мой код:

 if [ "$fruit != $blank" ] && [ "$quantity" == "$blank" ]; then cut -d\, -f1 information.txt | grep $fruit elif [ "$quantity != $blank" ] && [ "$fruit" == "$blank" ]; then cut -d\, -f2 information.txt | grep $quantity 

Мой код отобразит только предполагаемый поиск, поэтому, если вы закроете «Apple», он отобразит только «Красное яблоко» и «Зеленое яблоко», но не количество, как заставить его отображать всю информацию. То же, что и количество, если вы наберете «20», отобразится только «20».

  • Получить дату последнего дня последнего месяца в сценарии оболочки
  • Использование хеша в сценариях оболочки
  • Как извлекать значения из файла с помощью шаблонов из столбца в другом файле и вставлять их в новый столбец?
  • получение неожиданной ошибки EOF
  • Как проверить создание двух новых файлов в bash и выполнить действие?
  • #! / bin / bash exponent
  • Сценарий оболочки для переименования файлов
  • Загрузка выходного текста без файлов записи
  • One Solution collect form web for “Как отобразить всю строку текста?”

    Ваш cut эффективно удаляет информацию, которую вы ищете, из ввода, который вы подаете, в grep . Используйте только

     grep "^[^,]*$fruit[^,]*" information.txt 

    вместо

     cut -d\, -f1 information.txt | grep $fruit 

    а также

     grep "^[^,]*,$quantity$" information.txt 

    вместо

     cut -d\, -f2 information.txt | grep $quantity 

    для фильтрации интересующих вас строк. regexp:

    • ^ начинает сопоставление в начале строки;

    • [^,]* соответствует любой строке, не содержащей запятой ( , );

    • $fruit соответствует строке, содержащейся в переменной среды fruit ;

    • другой [^,]* должен быть очевиден в этой точке.

    Как только вы добавите больше полей в свои данные, вам может потребоваться изменить регулярные выражения – в этом случае любой учебник по этим пригодится, синтаксис находится на странице man grep(1) (например, man grep ).

    Если вы настаиваете на использовании cut и ваш вход сортируется, вы можете вернуть информацию с помощью join (для первого случая):

     inf=information.txt cut -d, -f1 $inf | grep "$fruit" | sort -u | join -t, -j 1 - $inf 
    • cut выдает первое поле ( -f1 ) файла, имя которого содержится в переменной окружения inf , где поля разделены запятой ( -d, );

    • grep см. выше;

    • сортирует и удаляет дубликаты ( -u );

    • join объединяет строки со стандартного ввода (рядом с последним аргументом) с содержимым файла, указанного в качестве последнего аргумента. Он использует запятую как разделитель полей ( -t, ) и соединяет строки, первые поля которых идентичны ( -j 1 ).

    Требование о том, чтобы отсортированные данные поступали из join (по крайней мере, в пакете coreutils) – я не проверял, как большие проблемы могут возникнуть с несортированными данными.

    Interesting Posts

    Как сохранить консольный ввод в mplayer при чтении из stdin?

    однозначно удалять нежелательные строки в нескольких файлах

    Почему я получаю ошибку 403 при посещении / javascript на моем сайте?

    Ошибка MCE: MCA: внутренняя ошибка четности

    Как отключить отображение в режиме реального времени команды unix «top»?

    Что такое «вар» аббревиатура?

    Получение файлов для текущей даты в Linux?

    пытаясь передать несколько строк, один за другим (каждая строка имеет 3 элемента, разделенных пробелом), поданных в уже написанный скрипт

    Лучший способ поддержания точности часов в LInux

    странные проблемы с CD-ROM писателями

    Загрузка в режиме спасения с поддержкой vlan в RHEL

    iptables: блокировать весь входящий трафик по определенному номеру порта

    dnsmasq останавливается после автоматического запуска после обновления ОС

    SED или AWK: добавьте символ в каждую строку после найденного шаблона

    Перемещение физических клавиш сенсорной панели на ThinkPad

    Linux и Unix - лучшая ОС в мире.