두 개의 다른 파일이 있습니다.
파일 1
/home/user1/
/home/user2/bin
/home/user1/a/b/c
파일 2
<TEXT1>
<TEXT2>
<TEXT1>
나는 바꾸고 싶다파일 2내용이 있는파일 1사용 sed
. 이 명령을 시도했지만 올바른 출력을 얻지 못했습니다.
cat File2|sed "s/<TEXT1>/$(cat File1|sed 's/\//\\\//g'|sed 's/$/\\n/g'|tr -d "\n")/g"
다른 도구를 사용하여 이 문제를 해결할 수도 있습니다.
답변1
다음은 sed 스크립트 솔루션입니다(명령줄에서 한 줄에 입력하는 것보다 보기 쉽습니다).
/<TEXT1>/ {
r File1
d
}
실행하세요:
$ sed -f script.sed File2
/home/user1/
/home/user2/bin
/home/user1/a/b/c
<TEXT2>
답변2
var 대체를 사용하여 솔루션을 찾는 데 오랜 시간이 걸렸습니다. 모든 sed 솔루션은 전체 줄을 삭제하거나 잘못 교체하기 때문에 작동하지 않습니다.
FILE2=$(<file2)
FILE1=$(<file1)
echo "${FILE2//TEXT1/$FILE1}"
file2의 모든 TEXT1 항목을 file1의 내용으로 바꿉니다. 다른 모든 텍스트는 변경되지 않습니다.
답변3
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