파일에서 대안을 로드하는 sed [중복]

파일에서 대안을 로드하는 sed [중복]

sed를 사용하여 한 파일의 패턴을 다른 파일의 전체 내용으로 바꾸려고 합니다.

현재 나는 다음을 사용하고 있습니다 :

sed "s/PATTERN/`cat replacement.txt`/g" "openfile.txt" > "output.txt"

'그러나 대체 파일에 , "또는 같은 문자가 포함되어 있으면 /입력이 삭제되지 않아 오류가 발생하기 시작합니다.

사용해보려고 했는데이 가이드도와주려고 하는데 이해하기 어렵네요. 제안된 명령을 시도하면 r file문자열만 표시됩니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

답변1

이것당신을 위해 일해야합니다. 파일 '에 및 문자가 있음을 이미 지정했기 때문에 중복으로 종료하도록 투표하지 않았습니다 /. "그래서 다음 테스트를 해봤습니다.

나는 file1다음을 가지고 있습니다.

cat file1
ramesh' has " and /
in this file
and trying
"to replace'
the contents in 
/other file.

이제 file2다음과 같습니다.

cat file2
This is file2
PATTERN 
After pattern contents go here. 

공유된 링크를 바탕으로 다음과 같이 만들었습니다 script.sed.

cat script.sed
/PATTERN/ {
  r file1
  d
}

sed -f script.sed file2이제 내가 얻는 출력 으로 명령을 실행하면 다음과 같습니다.

This is file2
ramesh' has " and /
in this file
and trying
"to replace'
the contents in 
/other file.
After pattern contents go here. 

편집하다: 이는 파일의 여러 패턴에도 적용됩니다.

답변2

솔루션이 필요한 경우 awk아래 표시된 솔루션을 사용할 수 있습니다.

 awk '/PATTERN/{system("cat file1");next}1' file2

시험

cat file1
ramesh' has " and /
in this file
and trying
"to replace'
the contents in 
/other file.

file2이제 다음이 있습니다 .

cat file2
This is file2
PATTERN 
After pattern contents go here.
PATTERN 

이제 위에서 언급한 awk명령을 사용합니다.

산출:

This is file2
ramesh' has " and /
in this file
and trying
"to replace'
the contents in 
/other file.
After pattern contents go here.
ramesh' has " and /
in this file
and trying
"to replace'
the contents in 
/other file.

인용하다

http://www.unix.com/shell-programming-and-scripting/158315-replace-string-contents-txt-file-changing-multiple-lines-strings.html

답변3

존재하다:

sed "s/PATTERN/`cat replacement.txt`/g" "openfile.txt"

'"문제가 되지 않습니다 . 이것들은 특별한 것이 아닙니다 sed. 문제는 및 &개행 문자입니다. 다른 명령을 사용하여 이스케이프할 수 있습니다.\/sed

sed "s/PATTERN/$(sed 's@[/\&]@\\&@g;$!s/$/\\/' replacement.txt)/g" openfile.txt

에서 후행 줄 바꿈을 제거합니다 replacement.txt. 이것이 당신이 원하는 것이 아니라면 이렇게 할 수 있습니다

replacement=$(sed 's@[/\&]@\\&@g;s/$/\\/' replacement.txt; echo .)
replacement=${replacement%.}
sed "s/PATTERN/$replacement/g" openfile.txt

답변4

GNU를 사용하면 sed스크립트 어디에서나 원하는 대로 무엇이든 할 수 있습니다 e. cat달리 r- 라인 사이클이 끝날 때 출력을 예약합니다.(이것은 매우 실망스러울 수 있습니다!)는 또는 e와 유사하게 작동하며 출력 을 즉시 기록합니다. 다음은 그 사용에 대한 몇 가지 예입니다.ic

printf %s\\n 'these are some words' \
    'that will each appear' \
    'on their own line' | 
    sed 's/.*words/echo & ; cat file/e'
these are some words
these
are
some
more
words    
that
are
stored
in
a
file
that will each appear
on their own line

사용 방법은 다음과 같습니다.

printf %s\\n 'these are some words' \
    'that will each appear' \
    'on their own line' | 
sed 's/\(.*\)\n*words/\1\n&/;//P;s//\ncat file/ep;s/.*\n//'
these are some 
these
are
some
more
words
that
are
stored
in
a
file
that will each appear
on their own line

관련 정보