1

Я пишу сценарий оболочки, чтобы grep что-то из файла журнала, а затем распечатать все результаты с помощью команды echo .

Я мог бы сделать это, но предположим, что журнал содержит более 1 экземпляра строки поиска, а затем выводит все результаты в одну строку. Можно ли распечатать результаты с переводом строки; если я просто выполню команду grep в оболочке, то она будет печататься с переводом строки, поэтому я подумал, что с помощью сценария оболочки она также будет работать так же, но, очевидно, этого не происходит.

Мои сценарии оболочки:

#!/bin/bash
messageStr='a senior leader of '$2
echo $messageStr
results=`grep "$messageStr" $1`
echo "results= " $results

Мой файл журнала:

A column written for ndtv.com by Ashutosh, a senior leader of Aam Aadmi Party or AAP, triggered protests from the opposition today and an order to appear before the country's top women's rights body, which said he has demeaned women.

a senior leader of Aam Aadmi Party or AAP

A column written for ndtv.com by Ashutosh, a senior leader of Aam Aadmi Party or AAP, triggered protests from the opposition today and an order to appear before the country's top women's rights body, which said he has demeaned women.

Фактические результаты:

results=  A column written for ndtv.com by Ashutosh, a senior leader of Aam Aadmi Party or AAP, triggered protests from the opposition today and an order to appear before the country's top women's rights body, which said he has demeaned women. a senior leader of Aam Aadmi Party or AAP

Ожидаемые результаты:

results=  A column written for ndtv.com by Ashutosh, a senior leader of Aam Aadmi Party or AAP, triggered protests from the opposition today and an order to appear before the country's top women's rights body, which said he has demeaned women. 
a senior leader of Aam Aadmi Party or AAP

Пожалуйста, дайте мне знать, если требуется какая-либо другая информация.

1 ответ1

1

Переменные без кавычек подвергаются разделению слов (после раскрытия параметра оболочки пробелы, символы табуляции и символы новой строки используются для разделения расширенной переменной на отдельные аргументы) и глобализации (раскрытие подстановочных знаков оболочки). Как правило, вы всегда должны заключать двойные кавычки в переменные оболочки, если вы не хотите, чтобы слова были разделены и / или выделены. Для получения дополнительной информации см. Http://mywiki.wooledge.org/Quotes.

Если я правильно понимаю ваш вопрос, в этом случае вам просто нужно заключить в кавычки параметр $results :

messageStr="a senior leader of $2"
echo "$messageStr"
results=$(grep "$messageStr" "$1")
echo "results=  $results"

Кстати, использование обратных тиков (эффективно) не рекомендуется для подстановки команд; Лучше всего использовать $() .

Приложение: http://shellcheck.net/ обеспечивает очень полезную обратную связь при разработке сценариев оболочки (например, выделение переменных без кавычек).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .