Разбор продолжений строки - PullRequest
1 голос
/ 04 августа 2009

Какой самый простой способ разобрать символы продолжения строки? Это кажется таким базовым действием, что я удивлен, что для этого нет основной команды. Циклы 'while read' и 'while read -r' не выполняют то, что я хочу, и самое простое решение, которое я нашел, это решение sed ниже. Есть ли способ сделать это с чем-то базовым, как tr?

$ cat input
Output should be \
one line with a '\' character.
$ while read l; do echo $l; done < input
Output should be one line with a '' character.
$ while read -r l; do echo $l; done < input
Output should be \
one line with a '\' character.
$ sed '/\\$/{N; s/\\\n//;}' input
Output should be one line with a '\' character.
$ perl -0777 -pe 's/\\\n//s' input
Output should be one line with a '\' character.

Ответы [ 3 ]

1 голос
/ 17 августа 2009

Если под «простейшим» вы подразумеваете краткость и разборчивость, я бы предложил ваш перллизм с одной небольшой модификацией:

$ perl -pe 's/\\\n//' /tmp/line-cont

Нет необходимости в интенсивном использовании памяти ... -0777 ... (режим полного обхода файла).

Если, однако, под «простейшим» вы подразумеваете не уходящую оболочку, этого будет достаточно:

$ { while read -r LINE; do
    printf "%s" "${LINE%\\}";    # strip line-continuation, if any
    test "${LINE##*\\}" && echo; # emit newline for non-continued lines
    done; } < /tmp/input

(я предпочитаю от printf "%s" $USER_INPUT до echo $USER_INPUT, поскольку echo нельзя сказать, что нельзя прекратить искать переключатели, и printf обычно в любом случае встроенный.)

Просто добавьте это в пользовательскую функцию и никогда больше не возмущайтесь ею. Внимание: этот последний подход добавит завершающий символ новой строки в файл, в котором его нет.

0 голосов
/ 06 августа 2009

Я бы выбрал решение Perl просто потому, что оно, вероятно, будет наиболее расширяемым, если вы захотите добавить больше функций позже.

0 голосов
/ 04 августа 2009

Путь регулярного выражения выглядит как путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...