Заменить в оболочке \n на \\n

Используйтеjoin:

join -t, -a1 <(sort -k1,1 -t, file1) <(sort -k1,1 -t, file2)

или csvjoinиз csvkit:

csvjoin --left -H -c a file1 file2

0
31.10.2020, 14:45
2 ответа

Вы можете легко сделать это в perl:

perl -pe 's/\n/\\n/' file

Если ваша строка находится в переменной, используйте:

perl -pe 's/\n/\\n/' <<<"$variable"

Или

printf '%s' "$variable" | perl -pe 's/\n/\\n/' 

Если хотите, можете сохранить как переменную:

$ cat test
foo
bar
$ test=$(perl -pe 's/\n/\\n/g' test)
$ echo "$test"
foo\nbar\n

Или, если вы не хотите преобразовывать последний завершающий символ новой строки и предполагаете, что ваш файл достаточно мал, чтобы поместиться в ОЗУ, вы можете сделать:

$ test=$(perl -0777 -pe 's/\n/\\n/g; s/\\n$/\n/' test); 
$ echo "$test"
foo\nbar

Или лучший способ, предложенный Ракешем Шармой в комментариях, который не требует хранения файла в памяти:

$ perl -lpe '$\ = eof ? qq(\n) : q(\n);s/\n/\\n/;' test
foo\nbar
0
18.03.2021, 22:53

С башмаком:

$ cat test
foo
bar
baz

$ content=$(<test)

$ joined=${content//$'\n'/\\n}

$ echo "$joined"
foo\nbar\nbaz
2
18.03.2021, 22:53

Теги

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