두 가지 다른 파일이 있습니다.
파일 1
/home/user1/
/home/user2/bin
/home/user1/a/b/c
파일 2
<TEXT1>
<TEXT2>
나는 대체 할 <TEXT1>
의 있는 File2을 의 내용 을 File1가 사용 sed
. 이 명령을 시도했지만 적절한 출력을 얻지 못했습니다.
cat File2|sed "s/<TEXT1>/$(cat File1|sed 's/\//\\\//g'|sed 's/$/\\n/g'|tr -d "\n")/g"
다른 도구를 사용하여이 문제를 해결할 수도 있습니다.
답변
sed 스크립트 솔루션은 다음과 같습니다 (명령 줄에서 한 줄로 가져 오는 것보다 눈에 더 쉽습니다).
/<TEXT1>/ {
r File1
d
}
그것을 실행 :
$ sed -f script.sed File2
/home/user1/
/home/user2/bin
/home/user1/a/b/c
<TEXT2>
답변
var replacement를 사용 하여이 솔루션을 찾는 데 오랜 시간이 걸렸습니다. 모든 sed 솔루션은 완전한 라인을 삭제하거나 잘못 교체하므로 나에게 적합하지 않았습니다.
FILE2=$(<file2)
FILE1=$(<file1)
echo "${FILE2//TEXT1/$FILE1}"
file2의 모든 TEXT1 발생을 file1의 내용으로 바꿉니다. 다른 모든 텍스트는 그대로 유지됩니다.
답변
어떤 경우에는 diff
/ patch
메소드가 관심이 있기 때문에 대답합니다 . 파일 blob1
에 포함 된 줄을 blob2
사용중인 줄로 대체하는 방법 :
diff -u blob1 blob2 > patch-file
예를 들어 다음이 blob1
포함 된 경우 :
hello
you
그리고 다음을 blob2
포함합니다 :
be
welcome
here
생성 patch-file
됩니다 :
--- blob1 2011-09-08 16:42:24.000000000 +0200
+++ blob2 2011-09-08 16:50:48.000000000 +0200
@@ -1,2 +1,3 @@
-hello
-you
+be
+welcome
+here
이제이 패치를 다른 파일에 적용 할 수 있습니다.
patch somefile patch-file
그것은 대체 할 것이다 hello
, you
에 의해 선 be
, welcome
, here
라인을 somefile
.