Как читать несколькими строками вместо линию за линией

Кажется, когда Вы делаете следующее:

VAR=
test -n $VAR && echo helloworld

Это рассматривает его, как будто аргумент не там:

test -n && echo helloworld

И, по некоторым причинам, когда аргумент не предоставляется, он всегда выполняет команду впоследствии (т.е. он отображает helloworld). Я попробовал это на другом unuary операторе, и он сделал то же самое:

FILENAME=
test -f $FILENAME && echo helloworld

Я думаю, хотите ли Вы ожидать поведение, необходимо заключить аргумент в кавычки:

VAR=
test -n "$VAR" && echo helloworld
FILE=
test -f "$FILE" && echo helloworld

Вышеупомянутые урожаи никакое сообщение, отзывающееся эхом на экран.

Относительно этого ожидаемое поведение? Я не могу найти его в документации нигде, но, это кажется довольно восстанавливаемым и последовательным.

2
28.12.2012, 02:45
2 ответа

Текстовые утилиты работают над строками (текст строка быть (не слишком долго) последовательности non-NUL символов, завершенных символом новой строки). awk одна стандартная утилита, которой можно сказать работать зарегистрированная разделенный другими вещами, чем символы новой строки, вот почему awk переговоры о записях вместо строк.

Например, Вы могли использовать > как разделитель записей. Как в:

awk -v RS='>' ...

Другой подход должен подкачать символ, который Вы хотите использовать в качестве разделителя записей (для других инструментов, чем awk) с символом новой строки:

... |
  tr '\n>' '>\n' |
  sed ... |
  other-text-utility... |
  tr '\n>' '>\n'

Они предполагают, что вещи, которые Вы хотите изменить, не включают вложенные HTML-тэги, поскольку они запустили бы новые записи.

Это - замена

0
27.01.2020, 22:14

Простой ответ: не используйте оболочку для парсинга XML. Используйте синтаксический анализатор XML вместо этого, например, один из многочисленных для Perl: XML:: Синтаксический анализатор, XML:: Простой, или любой другой язык. Для HTML, HTML:: Синтаксический анализатор является опцией (если мы остаемся с Perl).

Если Вы хотите использовать bash, можно играть с read встроенный и цикл немного.

2
27.01.2020, 22:14
  • 1
    Поскольку этим вопросом является отмеченный HTML, лучше предложите синтаксические анализаторы HTML вместо этого. Очень немного документов HTML являются синтаксически действительными и синтаксическими анализаторами XML, придирчивы на синтаксических ошибках по их характеру. –  manatwork 27.12.2012, 17:04

Теги

Похожие вопросы