Збереження нового рядка у результатах пошуку / grep


3

Я рекурсивно шукаю появу скриптів php, які викликаються з інших файлів, використовуючи наступний сценарій.

find . -exec grep -Hn $1 {} \; | grep -v ^Binary;

Працює відмінно! Тепер мені потрібні повернуті результати, щоб визначити наступну дію.

r=$(find . -exec grep -Hn $str {} \; | grep -v ^Binary;)

 if [ -z "$r" ];
    then
          Do this
    else
          Do something else
    fi

ПРОБЛЕМА: Самостійно скрипт пошуку повертає результати, кожен на новий рядок.

./path/to/file.php
./path/to/another_file.php
./path/to/third_file.php

Однак, при призначенні виводу змінної $ r символ нового рядка не зберігається, а результати друкуються на одному рядку, що ускладнює читання.

./path/to/file.php ./path/to/file.php ./path/to/third_file.php

Як зберегти символ нової рядки, призначаючи вивід у змінну?


1
Ви впевнені, що нові рядки не зберігаються, коли призначення текст до змінної? Ви говорите echo $r або echo "$r"? Якщо ви говорите echo $r, тоді нові рядки стають позбавленими на виході .
G-Man

Відповіді:


6

Ви не показуєте, що ви робите $r, але я впевнений, що це

echo $r

Щоб зберегти рядки, потрібно внести змінну в подвійні лапки

echo "$r"

Без котирувань змінна підлягає розщеплення слова , де є будь-які послідовності пробілів 1 (включаючи нові рядки) замінюються одним пропуском 1

1 : за замовчуванням залежить від вмісту $IFS (за умовчанням: пробіл, вкладка, новий рядок)


Я виводжу $ r до файлу "hits.txt". Ах так, "$ r" зробив різницю. Дякую!
pfmasse60
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.