2015-02-02 6 views
0

sed를 사용하여 고정 길이 파일을 편집하는 데 하나의 라이너 또는 간단한 스크립트를 만드는 데 문제가 있습니다. 내 파일을 가정 할sed - 특정 위치의 정규 표현식

이 형식의 행이 있습니다

IPITTYTHEFOOBUTIDONOTPITTYTHEBAR

IPITTYTH BARBUTIDONOTPITTYTH3FOO을

전체 라인이 문자열로 간주하는 경우, 내가 시작하는 문자열을 일치시킬 것이라고 말할 수있다 위치 10에 있고 정규 표현식으로 길이가 3입니다. 그것은 정규식과 일치하는 경우 그 라인의 끝에 다른 문자열이 싶어요. FOO에게

IPITTYTHE BUTIDONOTPITTYTHEBAR

IPITTYTH BAR를 :

일치하는 정규식 B.R입니다 가정하고, 문자열이 라인 NOT의 마지막에 추가, 나는 여러 차례 내 파일을 원하는 것 BUTIDONOTPITTYTHEFOONOT

파일의 줄이이 예제의 줄보다 큽니다.

지금까지 나는이 있습니다

sed -i '/B.R/ s/$/NOT/' file.name 

문제이뿐만 아니라 예를 들어 경기의 첫 번째 줄을, 정규식이 일치하는 위치를 무시한다는 것입니다 :

IPITTYTHEFOOBUTIDONOTPITTYTHE BAR

IPITTYTH BAR BUTIDONOTPITTYTH3FOO

awk도 사용할 수 있습니다.

미리 감사드립니다.

답변

4

거의 다 왔어. B.R 앞에있는 문자를 지정하기 만하면됩니다. B가 10 번째 위치에있을 경우, 9 개 문자가 있어야 존재 B

sed -i '/^.\{9\}B.R/s/$/NOT/' file.name 

예 전에 :

$ sed '/^.\{9\}B.R/s/$/NOT/' file 
IPITTYTHEFOOBUTIDONOTPITTYTHEBAR 
IPITTYTH BARBUTIDONOTPITTYTHEFOONOT 
+0

감사합니다. :) 그게 내가 필요한 것입니다. – barras

+0

다행 이었기 때문에 .. –