2012-03-18 3 views
2

나는 여러 줄이 포함 된 파일이 있습니다파일에서 인용 된 문자열을 자르는 명령이 있습니까?

revision="abcdabcdabcd0000111122223333" 
revision="0000111122223333444455556666" 

을 그리고는 다음과 같이 (예를 들어, 8)에 인용 된 문자열을 절단 할 :

revision="abcdabcd" 
revision="00001111" 

을 내가 사용할 수있는 방법 sed/awk/perl 이것을 수행 하시겠습니까?

답변

3

아마도 :

sed -i 's/\(revision="........\)[^"]*"/\1"/' file 
3

키워드 개정 항상인가? 문자열의 정보가 항상 8자를 초과합니까?

이 기호와 큰 따옴표와 동일하기 전에이 (기억된다) 어떤 낮은 경우에만 키워드를 검색
sed 's/^\([a-z]*\)="\([^"]\{1,8\}\)[^"]*"/\1="\2"/' input > output 

은 다음 1-8을 찾습니다

나는 내가 좋아하는 뭔가를 찾고있을 거라고 생각 비 - 이중 인용 부호 문자 (기억하고있다), 0 개 이상의 다른 비 - 이중 인용 부호 및 이중 인용 부호가 뒤 따른다. 이들은 키워드, 같음, 큰 따옴표, 기억되지 않은 이중 따옴표 및 큰 따옴표로 바뀝니다. 후행 물자가있는 경우에는 수정되지 않은 상태로 남습니다.

+0

(+1) ... Typo : 시작시 's'가 필요합니다. 'sed 's/...' –

+0

@ Peter.O와 Glenn에게 감사드립니다. –

0

펄 솔루션 :

perl -pi.bak -we 's/^revision="[^\n"]{0,8}\K.*/"/' myfile.txt 

myfile.txt.bak에 백업을 저장합니다. i.bak을 제거하면 파일을 변경하지 않고 출력 만 보입니다. 백업을 저장하지 않으려면 .bak을 제거하십시오 (되돌릴 수 없음).

정규식은 revision="으로 시작하는 줄을 찾아 변경합니다. 이 일치 후에는 큰 따옴표 나 개행 (*)이 아닌 다음 0-8 문자를 보존하고 나머지는 제거합니다. 줄 바꿈 앞에 줄의 끝 부분에 큰 따옴표가 추가됩니다.

(*) 줄 바꾸기가 포함 된 줄 바꿈이나 잘못된 형식의 줄이 파일을 손상시키지 않도록 줄 바꾸기가 추가되었습니다. 이렇게하면 닫는 것을 추가하여 열린 큰 따옴표를 "수정"합니다.

0
perl -i~ -pe's/^revision="[^"]{0,8}\K[^"]+//' file 
관련 문제