다음과 같이 문자열을 변환하는 방법을 찾고 있습니다.
foo\nbar
입력하다:
foo\\nbar
지금까지 내가 본 것은 tr
문자로만 작동하기 때문에 이 작업을 수행할 수 없으며 작동하는 다른 솔루션을 찾을 수 없다는 것입니다...
예:
redgl0w@anarchy ~> cat test
foo
bar
나는 다음을 얻기를 희망합니다:
redgl0w@anarchy ~> echo test
foo\nbar
답변1
배시 사용:
$ cat test
foo
bar
baz
$ content=$(<test)
$ joined=${content//$'\n'/\\n}
$ echo "$joined"
foo\nbar\nbaz
답변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
또는 마지막 후행 줄 바꿈을 변환하지 않고 파일이 RAM에 들어갈 만큼 작다고 가정하면 다음을 수행할 수 있습니다.
$ 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