проблема эха Баш - PullRequest
       34

проблема эха Баш

0 голосов
/ 26 апреля 2011

Вот скрипт bash, который извлекает некоторые данные из html-файла.

price=`grep '        <td>\$' $1 | sed -e 's/<td>//g' -e 's:</td>::g' -e 's/\$ //g' -e 's/^  *//g'`
grep '        <td>\$' $1 | sed -e 's/<td>//g' -e 's:</td>::g' -e 's/\$ //g' -e 's/^  *//g'

echo "Price: $price"

Часть sed может использовать некоторую помощь, но здесь проблема не в этом.Проблема в том, что когда я запускаю скрипт, он должен напечатать найденное значение дважды, верно?Но он печатает его только один раз, в первый раз (без 'Price:').В чем здесь проблема?

Ответы [ 4 ]

1 голос
/ 26 апреля 2011

Проблема в том, что возвращаемая строка содержит \r, которая возвращает курсор к первому столбцу перед выводом на печать. Используйте od -c для подтверждения. И используйте подходящий инструмент, такой как xmlstarlet, чтобы убедиться, что этого не произойдет.

0 голосов
/ 26 апреля 2011

Несколько комментариев о вашем использовании sed:

-e 's/^ *//g' - вам не нужна буква "g": ваш шаблон привязывается в начале, поэтому он может совпадать только один раз.Также можно посмотреть вкладки: -e 's/^[[:space:]]\{1,\}//'

-e 's/<td>//g' -e 's:</td>::g' можно свернуть в -e 's|</\{0,1\}td>||g'

0 голосов
/ 26 апреля 2011

Я предполагаю, что в отличие от показанного кода, назначение фактически происходит в подоболочке и поэтому не отображается (потеря при выходе из подоболочки)

Боюсь, вы столкнулись с проблемой подоболочки, которую выне показывать здесь.Опубликуйте больше кода, который вы действительно используете, если можете.

--- Пример:

 unset price
 price=1
 echo $price   # works

 unset price
 echo -n 1 | price=$(cat)
 echo $price   # works _not_
0 голосов
/ 26 апреля 2011

Первый grep читает все на стандартном вводе. Затем второй блок grep пытается прочитать данные со стандартного ввода.

...