SED \n и \ни во что

Люди на этом форуме были огромной справкой! Огромное спасибо!

Вот моя строка

UEsDBBQAAAAIAKJBWEUdUIwScwwBAAB+AQAgAAAAQ29weV9vZl9kb2N1bWVudF9PY3QtMjQtMjAx\nNC5leGXsvXlcU0f0N5xAgICBRAVFRaVK3XfAigFFJYALGkSCKItWRMQNMVHrCl6ihGvc6lq1laKt\na11q3ZcgyKKouG+o2KJeDCoqCgpyn3Pm3ovY5X1\/zz\/

Я пытаюсь удалить \n и \от вышеупомянутой строки.

Я попробовал:

tr ‘\n\r\\’ ‘   ‘

sed 's/\n//g;s;\\;;g'

И несколько других изменений, но я не успешен в разделении всего. Я могу добраться \, но не n.

Кто-либо видит мою ошибку?

2
задан 24 October 2014 в 15:46

3 ответа

Попытка:

sed 's/\\n//g;s/\\//g'

Вы хотите удалить литерал \ сопровождаемый литералом n. Следовательно, обратной косой черты нужно оставить в первой замене. В отличие от этого, s/\n//g удалил бы символы новой строки.

6
ответ дан 19 November 2019 в 00:44

Используйте это с tr для удаления (-d) весь \n и \:

tr -d '\\n\\' 

Тест:

echo 'foo\nbar\foo' | tr -d '\\n\\'

Вывод:

foobarfoo
2
ответ дан 19 November 2019 в 00:44

Вы могли сделать просто как это. У Вас не должно быть другой замены.

sed 's/\\n\|\\//g'

ИЛИ

sed 's~\\n\|\\~~g'

Пример:

$ var='UEsDBBQAAAAIAKJBWEUdUIwScwwBAAB+AQAgAAAAQ29weV9vZl9kb2N1bWVudF9PY3QtMjQtMjAx\nNC5leGXsvXlcU0f0N5xAgICBRAVFRaVK3XfAigFFJYALGkSCKItWRMQNMVHrCl6ihGvc6lq1laKt\na11q3ZcgyKKouG+o2KJeDCoqCgpyn3Pm3ovY5X1\/zz\/'
$ sed 's/\\n\|\\//g' <<<"$var"
UEsDBBQAAAAIAKJBWEUdUIwScwwBAAB+AQAgAAAAQ29weV9vZl9kb2N1bWVudF9PY3QtMjQtMjAxNC5leGXsvXlcU0f0N5xAgICBRAVFRaVK3XfAigFFJYALGkSCKItWRMQNMVHrCl6ihGvc6lq1laKta11q3ZcgyKKouG+o2KJeDCoqCgpyn3Pm3ovY5X1/zz/

Объяснение:

Синтаксис sed:

sed 's/pattern/replace/modifier' file

Команда:

Splitted вышеупомянутое sed управляют как ниже для разъяснения.

sed 's/\\n\|\\//g'
  • s - поиск и замена.
  • \\n\|\\ - Шаблон. \\n соответствуют литералу \n, ИЛИ \| соответствуют литералу \. Так сначала это соответствует весь \n во входной строке и затем соответствует \
  • //, у Нас есть пустая сменная деталь, что означает, удаляют все подобранные символы или заменяют подобранные символы пустой строкой.
  • g - Глобальный модификатор. Это делает соответствие для случая глобально. т.е., если два или больше \ подарок символов на одной строке, это sed 's/\\//' file удаляет только первое \ для каждой строки. Но глобальный модификатор g силы sed для соответствия всему существующему \ символы.
<час>

Через GNU sed,

$ sed -r 's/\\n|\\//g' <<<"$var"
UEsDBBQAAAAIAKJBWEUdUIwScwwBAAB+AQAgAAAAQ29weV9vZl9kb2N1bWVudF9PY3QtMjQtMjAxNC5leGXsvXlcU0f0N5xAgICBRAVFRaVK3XfAigFFJYALGkSCKItWRMQNMVHrCl6ihGvc6lq1laKta11q3ZcgyKKouG+o2KJeDCoqCgpyn3Pm3ovY5X1/zz/
<час>

Через Perl,

$ perl -pe 's/\\n?//g' <<<"$var"
UEsDBBQAAAAIAKJBWEUdUIwScwwBAAB+AQAgAAAAQ29weV9vZl9kb2N1bWVudF9PY3QtMjQtMjAxNC5leGXsvXlcU0f0N5xAgICBRAVFRaVK3XfAigFFJYALGkSCKItWRMQNMVHrCl6ihGvc6lq1laKta11q3ZcgyKKouG+o2KJeDCoqCgpyn3Pm3ovY5X1/zz/
1
ответ дан 19 November 2019 в 00:44

Другие вопросы по тегам:

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