$string
여러 줄 바꿈이 포함된 일부 텍스트를 포함하는 쉘 변수가 있다고 가정해 보겠습니다 . 예를 들면 다음과 같습니다.
string="this
is
a test"
new_string
이 문자열을 모든 개행 문자가 공백으로 변환되는 새 문자열로 변환하고 싶습니다 .
new_string="this is a test"
나는 시도했다:
print $string | sed 's/\n/ /g'
하지만 소용없어
perl -0777 's/\n/ /g'
또한 명령이나 명령을 사용하여 이 작업을 수행할 수 있는 방법이 있는지 궁금합니다 tr
.
답변1
문자열에서 새 줄만 제거하려면 사용할 필요가 없습니다 sed
.
$ echo "$string" | tr '\n' ' '
다른 사람들이 지적했듯이.
그러나 파일의 새 줄을 공백으로 변환하려면 sed
다음을 사용할 수 있습니다.
# for a file
$ sed -i ':a;N;$!ba;s/\n/ /g' file_with_line_breaks
# for a string
$ new_string="$(echo "$string" | sed ':a;N;$!ba;s/\n/ /g')"
심지어 awk
:
$ awk '$1=$1' ORS=' ' file_with_line_breaks > new_file_with_spaces
답변2
또 다른 옵션은 다음을 사용하는 것입니다 xargs
(또한 여러 공백을 압축합니다).
string="this
is
a test"
printf "$string" | xargs # this is a test
답변3
예제에서와 같이 문자열을 bash 변수로 이미 가지고 있는 경우 , , 등을 호출하는 것은 sed
의미 awk
가 printf
없으며 리소스 낭비(및 더 많은 입력)입니다... 다음을 사용할 수 있습니다.bash 변수 확장:
string="${string//$'\n'/ }"
다시 할당할 필요도 없습니다. 확장 기능을 있는 그대로 사용하고 $string
변경하지 않고 그대로 둘 수 있습니다.
printf "${string//$'\n'/ }" >file
답변4
이 awk 명령을 시도해 볼 수도 있습니다.
awk -v RS="" '{gsub (/\n/," ")}1' file
예:
$ (echo This; echo is; echo a; echo test.) | awk -v RS="" '{gsub (/\n/," ")}1'
This is a test.