쉘에서 \n을 \\n으로 바꾸십시오.

쉘에서 \n을 \\n으로 바꾸십시오.

다음과 같이 문자열을 변환하는 방법을 찾고 있습니다.

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

관련 정보