2014-06-10 4 views
3

매우 큰 파일 (~ 500GB)의 첫 번째 줄과 마지막 줄을 편집하고 싶습니다. 어떻게 그렇게 할 수 있습니까?대용량 파일의 첫 번째 줄과 마지막 줄 편집

-flag </begin> 

을하고 나는 "-flag"를 생략하고 싶습니다 예를 들어, 첫 번째 줄에 내가있다. 나는 첫 번째 줄을 편집 (그림 참조) 나오지 사용하여 시도하지만 작동하지 않았다 :

sed -i '1s/-flag <begin>/<begin>/g' file.txt 
+0

마지막 줄에서 무엇을 삭제 하시겠습니까? –

답변

2

난 당신이이 자리에서 (내가 하나를 듣고 싶네 할 수있는 방법을 생각할 수 없다 할 것) 마지막 줄에해야 할 일!)

이것은 당신이 truncate 같은 도구의 몇 가지를 가지고 당신이 당신의 쉘에서 산술 연산을 할 수 있다고 가정

# substitute the first line and exit 
sed '1s/-flag \(.*\)/\1/;q' file > new   
# add the rest of the file (probably quicker than sed) 
tail -n +2 file >> new  
# cut off the last line of the file 
truncate -s $(($(stat -c "%s" new) - $(tail -n 1 new | wc -c))) new 
# substitute the last line        
tail -n 1 file | sed 's/-flag \(.*\)/\1/' >> new 

(내 껍질이 bash입니다) : 단단하게 한 라이너하지만이 시도를 줄 수 없었다.

truncate -s은 전체 파일 크기 stat -c "%s"과 마지막 줄의 길이를 바이트 단위로 구분하여 마지막 줄을 제거합니다.

마지막 줄에서 제거하려고 시도한 내용이 확실치 않지만 첫 번째 줄과 동일한 것으로 가정했습니다 (줄의 시작 부분에서 -flag을 제거하십시오).

제안 된 수정을 환영합니다.

+0

파일의 나머지 부분의 오프셋이 변경되지 않도록 기존 텍스트를 똑같은 텍스트로 바꾸는 경우에만이 작업을 수행 할 수 있습니다. 이를 위해'dd '를 사용할 수 있습니다. OP 예제는 텍스트를 삭제하는 것이기 때문에 파일의 나머지 부분을 옮길 필요가 있습니다 ... – twalberg

+0

마지막 줄을 대체 할 마지막 단계에서 파일의 의미는 무엇입니까? – NewToAndroid

+0

죄송합니다, 어떤 파일이 참조하십시오! – NewToAndroid

1

당신이 첫 번째 라인 (후행 공백주의) -flag 제거하려면 :

완전히 첫 번째 줄의 내용을 교체하려는 경우, 당신은

sed -i '1s/.*/new first line/' file 

가 마지막 줄 (난 당신이 무슨 말을하지 않았기 때문에 예를 들어이 제공하고 있습니다에 동일한 작업을 수행하기 위해 실행할 수있는

sed -i '1s/-flag //' file 

너 w 개미는

sed -i '$s/.*/new last line/' file 
+0

줄 번호를 지정하기 때문에 빠른 절차가 아니니? 그러나, 나는 명령을 해고 한 이후로 sed가 잠시 동안 작동했다는 것을 알 수있다. – NewToAndroid

+0

대시는 regex (문자 클래스 하위 언어 제외)에서 특별한 의미가 없으므로 이스케이프 할 필요가 없습니다. – tripleee

+0

파일이 처음부터 끝까지 처리됩니다. 파일의 시작 부분 만 다시 쓰는 방법은 없습니다. – tripleee

0

일반적으로 파일의 시작 부분을 변경하면 파일 시스템의 작동 방식과 관련된 이유로 here이 완전히 설명되어 있습니다.

그러나 정확히 같은 길이를 유지하면서 선을 재 작성하는 경우 트릭이있다 : 이 자리에서 편집.

이 작업을 수행하는 간단한 명령 줄 도구는 리눅스에서 hexedit입니다 (바로 가기 there 참조). 변경된 바이트 만 디스크에 기록해야하기 때문에 빠른 속도입니다. 그러나 새 행의 문자 수가 동일해야하며 항상 같은 것은 아닙니다.

OP 케이스의 경우 -flag을 5 "공백"문자로 바꾸는 것으로 충분하지만 다른 경우에는 처리하기가 더 어려울 수 있습니다.

관련 문제