저는 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
이것의 장점은 기존 공백이 수정되지 않는다는 것입니다.