이 태그는 후행 줄바꿈을 무시합니다.

이 태그는 후행 줄바꿈을 무시합니다.

저는 sed를 사용하여 파일의 패턴 위에 몇 줄을 삽입하고 있습니다. 파일 예

Stuff

Pattern

Stuff

이것은 파일을 분할하여 텍스트를 삽입하기 전에 사용하는 코드입니다.Pattern

     patternline=$(grep -n "Pattern" "/my/file" | cut -f1 -d:)
     firstcut=$(($patternline -1))

     firstpart=$(sed -n 1,"$firstcut"p "/my/file")
     secondpart=$(sed -n ''"$abspathcomment"',$p' "/my/file")

     # Indentation intentional as snippet is nested within an IF statement
     text=$(cat <<EOF

Text I want to insert with one leading and two trailing new lines


EOF
)

     echo "$firstpart$text$secondpart" > "/my/file"

sed를 사용하여 파일을 분할하고 중간에 원하는 텍스트를 삽입하고, 마지막으로 cat을 사용하여 해당 내용을 동일한 파일에 출력합니다.

나는 파일의 다음과 같은 출력을 얻을 것으로 예상합니다.

Stuff

Text I want to insert with one leading and two trailing new lines


Pattern

Stuff

하지만 대신 나는 얻는다

Stuff

Text I want to insert with one leading and two trailing new linesPattern

Stuff

sed 또는 bash가 개행 문자를 제거하는지 확실하지 않습니다. Bash에서 파일에 결과를 반영할 때 결과를 보존하는 방법은 무엇입니까?

답변1

명령 대체는 후행 줄 바꿈을 사용합니다.

a=$( printf 'hello\nworld\n\n\n\n\n\n' )
printf 'a is "%s"\n' "$a"

산출:

a is "hello
world"

sed원래 문제를 해결하는 데 사용합니다 .

sed '/Pattern/i\
Text I want to insert with one leading and two trailing new lines\
\

' file

또는 GNU를 사용하십시오 sed.

sed '/Pattern/i Text I want to insert with one leading and two trailing new lines\n\n' file

여기서는 i("삽입") 명령을 사용하여 sed일치하는 행 앞에 특정 행 집합을 삽입합니다 Pattern. 첫 번째 변형에서 두 개의 개행 문자를 이스케이프하여 sed텍스트에 삽입할 수 있습니다. 결과의 선행 개행 문자는 Pattern시작 부분의 개행 문자와 동일합니다.

예를 들어 이것이 생성하는 데이터

Stuff

Text I want to insert with one leading and two trailing new lines


Pattern

Stuff

이것의 장점은 기존 공백이 수정되지 않는다는 것입니다.

관련 정보