sed를 사용하여 개행 문자를 공백으로 변환

sed를 사용하여 개행 문자를 공백으로 변환

$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의미 awkprintf없으며 리소스 낭비(및 더 많은 입력)입니다... 다음을 사용할 수 있습니다.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.

관련 정보