Bash에서 문자열에 파일 내용을 삽입하는 방법

Bash에서 문자열에 파일 내용을 삽입하는 방법

문자열의 특정 줄 뒤에 여러 줄 텍스트 파일의 내용을 추가하고 싶습니다. 예를 들어 파일의 경우파일.txt포함하다

line 1
line 2

나는 이런 것을하고 싶다printf "s1random stuff\ns2 more random stuff\ns1 final random stuff\n" | sed "/(^s2.+)/a $(<file.txt)"

출력을 얻으십시오 :

s1 random stuff
s2 more random stuff
line 1
line 2
s1 final random stuff

따옴표와 이스케이프 문자의 다양한 조합을 시도했지만 아무것도 작동하지 않는 것 같습니다. 내 특정 사용 사례에서는 문자열이 bash 변수가 되므로 일을 더 쉽게 만들어주는 난해한 내용이 있다면 알아두는 것이 좋습니다.

지금 내가 하고 있는 일은 파일에 문자열을 쓰고 grep을 사용하여 추가할 줄을 찾은 다음 head, printf 및 tail의 조합을 사용하여 파일을 함께 압축하는 것입니다. 이 작업을 수행하기 위해 파일에 텍스트를 쓸 필요는 없는 것 같습니다.

답변1

미리 파일을 읽을 필요는 없습니다. sed는 이미r명령파일을 읽을 수 있습니다:

$ printf -v var "%s\n" "s1random stuff" "s2 more random stuff" "s1 final random stuff"

$ echo "$var"
s1random stuff
s2 more random stuff
s1 final random stuff

$ sed '/^s2/r file.txt' <<< "$var"
s1random stuff
s2 more random stuff
line 1
line 2
s1 final random stuff

답변2

변수의 개행 문자를 \newline. 그리고 삽입할 텍스트를 앞에 추가해야 합니다 \newline.

var=$(<file.txt)
# Put backslash before newlines in $var
var=${var//
/\\
}
printf "s1random stuff\ns2 more random stuff\ns1 final random stuff\n" | sed "/^s2/a \
$var"

답변3

이런 걸 하고 싶나요? :

LINE1=`cat test.file | sed '1!d'`
LINE2=`cat test.file | sed '2!d'`
LINE3=`cat test.file | sed '3!d'`
LINE4=`cat test.file | sed '4!d'`

echo $LINE1
echo $LINE2

관련 정보