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

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

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

  • Как печатать значения переменных с добавочными числами, используя цикл в сценарии оболочки?
  • Может кто-нибудь объяснить, что «$ {files }»
  • Как выполнить команду внутри сценария оболочки без открытия новой оболочки
  • cd во все каталоги, выполнить команду над файлами в этом каталоге и вернуться в предыдущий текущий каталог
  • Команды Unix для генерации случайного алфавита
  • Сценарий Bash Не меняющийся каталог
  • Простой скрипт Bash; Только работает?
  • set command with - flag
  • что такое >> символ и> и в unix / Linux?
  • Ошибка подстроки в сценарии оболочки
  • Объединение нескольких функций в один скрипт bash
  • Linux и Unix - лучшая ОС в мире.