Удалить перевод строки из строки с помощью tr - PullRequest
0 голосов
/ 14 марта 2020

У меня есть файл, содержащий строки с символами новой строки, например:

{"name": "John\n\nMeyer"}
{"name": "Mary\n\nSmith"}

Как я могу удалить их с помощью инструмента tr?

Я пытаюсь это сделать, но вывод плохой:

$ cat f.json | tr -s '\\n\\n' ' '
{" ame": "Joh Meyer"}
{" ame": "Mary Smith"}

С Perl, это же регулярное выражение работает отлично:

$ cat f.json | perl -pe 's/\\n\\n/ /g'
{"name": "John Meyer"}
{"name": "Mary Smith"}

1 Ответ

1 голос
/ 14 марта 2020

Попробуйте параметр -d tr, чтобы удалить символы:

tr -d \\n

Соберите все вместе:

cat f.json | tr -d \\n

Вам не нужен параметр -s , Параметр -s tr означает «сжатие». Squeeze удаляет указанный символ, если он появляется более одного раза (оставляя один).

В качестве альтернативы, чтобы избежать ненужного использования cat и pipe, вы можете просто написать код, подобный этому:

tr -d \\n <f.json

Еще одно примечание: если ваш ввод действительно не имеет перевода строки, а имеет обратную косую черту sh, за которой следует 'en', вы не можете использовать tr для их удаления - tr работает с одиночными символами.

...