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

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

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».

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) – я не проверял, как большие проблемы могут возникнуть с несортированными данными.

  • как использовать строки в файле в качестве переменной
  • Сохранить командную строку в переменной bash
  • Перенаправить вывод команды в два разных файла
  • Я хочу отслеживать файлы, которые обрабатываются в последний час
  • Скрипт Bash; оптимизация скорости обработки
  • Печатать значения строк из текста с разделителями в Unix
  • один лайнер для использования памяти
  • Извлечь строку из пути
  • найти определенный шаблон строки из файла в Unix Shell Scripting
  • вставить значение из ссылочного файла
  • Исправить массив неполных ссылок
  • Скрипт Simple Shell для регистрации дискового пространства
  • Linux и Unix - лучшая ОС в мире.