두 개의 파일이 있습니다. 첫 번째 파일은 기존 C/C++ 소스 파일( *.cpp
)입니다. 두 번째는 *.txt
함수를 포함하는 텍스트 파일( )입니다 . 함수는 두 개의 파일에 있으며 두 번째 파일( *.txt
)에서 첫 번째 파일( *.cpp
)로 복사해야 합니다. 함수 길이도 꽤 길어서(890줄 이상) 복사/붙여넣기가 좀 어색합니다.
나sed
주문이 있습니다첫 번째 file()에서 함수를 캡처합니다 *.cpp
.
ifile=blake2.cpp.old
ofile=blake2.cpp
ffile=blake2-neon.txt
sed -n '/^static void BLAKE2_NEON_Compress64(/,/^}$/p' < $ifile > $ofile
sed
캡처한 텍스트를 바꾸는 방법을 모르겠습니다 . 합격하려고 했는데GNU sed 매뉴얼, 하지만 운이 별로 좋지 않네요. 가장 먼저 해야 할 일 중 하나는 포기하는 것입니다 /p
.
sed
찾은 텍스트 블록을 다른 파일의 텍스트로 바꾸는지 어떻게 알 수 있나요 ?
비슷한 질문을 찾았습니다파일의 두 태그 사이에 있는 텍스트를 다른 파일의 텍스트로 바꾸는 방법은 무엇입니까?그러나 나는 무슨 일이 일어나고 있는지 잘 이해하지 못합니다. 특히 질문에 태그가 지정되었지만 sed
답변이 제공되었기 때문입니다 ed
.
이 스크립트를 작성하려는 이유는 IA-32 SSE를 ARM NEON으로 포트하기 때문입니다. 기본 교체를 수행하는 스크립트가 있습니다. 변경 후에는 업데이트된 함수를 소스 코드에 복사하고 해당 코드를 디바이스에 scp한 다음 컴파일해야 합니다. 거품을 내고 헹구고 반복하세요. 반복할 때마다 1000줄의 함수를 수동으로 복사/붙여넣기하면 다른 작업을 수행하는 데 더 좋은 시간이 소모됩니다.
답변1
이런 것을 시도해 보세요. 함수의 시작 부분을 일치시키고 read 명령을 사용하여 r
텍스트 파일을 읽습니다. 그런 다음 d
함수의 시작과 끝 사이에 있는 모든 줄을 삭제하는 명령을 추가합니다 .
sed '
/^static void BLAKE2_NEON_Compress64(/r '"$ffile"'
/^static void BLAKE2_NEON_Compress64(/,/^}$/d
' <"$ifile" >"$ofile"
바꾸려는 문자열이 한 줄에 있으면 이것을 시도해 볼 수 있습니다
uuid='c0e4e6b2-81f4-477c-89a4-7656e58719ce'
sed '/^'"$uuid"'/{
r '"$ffile"'
d
}' <"$ifile" >"$ofile"