2013-04-24 4 views
9

쉼표 다음에 공백을 제거하기 위해이 sed 명령을 사용했습니다.특정 줄 사이에서만 sed 사용

sed -e 's/,\s\+/,/g' example.txt 

어떻게 변경할 수 있습니까? 특정 줄 번호 사이에서만 수정됩니다.

(예 : 두 번째 줄과 세 번째 줄 사이).

+1

라인 2.5 ......? –

+0

sed를 호출 할 때 특정 라인 번호를 알고 있습니까? 아니면 데이터 자체에 의존하는 파일 영역이 있습니까? sed처럼 특정 시작과 끝 마커 사이에서만 활성화되어야합니까? 이 경우'awk'를 사용합니다. 왜냐하면 선 사이에 상태 변수를 유지할 수 있기 때문입니다. –

답변

17

사용 :

sed '2,3s/,\s\+/,/g' example.txt 
1
sed -e '2,3!b;s/,\s\+/,/g' example.txt 

이 버전은 나중에 원하는 줄을 처리하는 명령을 추가하려는 경우 유용 할 수 있습니다.

+2

좋은 정보가있는 것 같습니다. 그러나 나는 인정해야한다, 나는 계속하고있는 일을 따라 가지 않는다. 그게 왜'! b'와';'가 존재하고 나중에 어떻게 유용하게 사용되는지는 분명하지 않습니다. 아마 당신은 약간을 설명 할 수 있습니다. – jww

3

이후 OSX (BSD가 나오지도) 나오지도 리눅스 (GNU) 일부 구문 차이가 나는 내 일부 하드 원 노트에서 다음을 추가 거라고 생각 :

OSX (BSD) SED (주소) 블록 내에서 대체 (시작 및 종료 지점 패턴 (/../) 또는 라인 #S) 같은 파일 (via & via & via & 섹션 4.20 here)/찾기 :

구문 : 표준 찾을

$ sed '/start_pattern/,/end_pattern/ [operations]' [target filename] 

은/예를 바꾸

$ sed -i '' '2,3 s/,\s\+/,/g' example.txt 
$ sed -i '' '/DOCTYPE/,/body/ s/,\s\+/,/g' example.txt 

찾기/복잡한 연산자 예를 교체하고 (표준 입력을 사용 스트림으로 인한 구문 그룹화하지 않고 작동 할 수없는) 그룹핑. 그룹의 모든 문은 별도의 라인, 또는 세미콜론/w를 분리해야합니다

복합 연산자 예 (전체 라인 일치하는 항목을 포함 삭제됩니다) :

$ sed -i '' '2,3 {/pattern/d;}' example.txt 

멀티 파일 찾기 + sed :

$ find ./ -type f -name '*.html' | xargs sed -i '' '/<head>/,/<\/head>/ {/pattern/d; /pattern2/d;}' 

희망이 있으면 도움이 될 것입니다.