sed 공간 일치 문제

sed 공간 일치 문제

이 파일이 있어요 -

#
# gridID 1
#
gridtype  = lonlat
gridsize  = 10512
xsize     = 144
ysize     = 73
xname     = lon
xlongname = "longitude"
xunits    = "degrees_east"
yname     = lat
ylongname = "latitude"
yunits    = "degrees_north"
xfirst    = 0
xinc      = 2.5
yfirst    = 90
yinc      = -2.5

검색해서 바꾸고 싶어요

xfirst  = 0 

그리고

xfirst = -180

우분투 16.04에서 이것을 시도했습니다.

sed s/=[[:space:]]0/-180/

나는 얻다

sed:No match

내가 어디서 잘못됐나요?

답변1

glob 연산자를 인용하는 것을 잊어버렸고 , , ( glob 연산자 는 지원되지 않지만 ), , (오류 메시지가 표시될 가능성이 높음 ) 및 (올바르게) glob이 일치할 수 없을 때 명령이 실패하는 [[:space:]]쉘을 사용했습니다 .cshtcshfishfish[...]zshbash -O failglob(t)csh

tcsh[:space:]POSIX 문자 클래스가 인식되지 않지만 s/=[[:space:]]0/-180/여전히 glob으로 인식됩니다.

a 이후에는 mkdir -p 's/=a]0/-180'glob이 일치합니다. 이는 s/=[[:space:]]0/-180/확장되며 오류가 s/=a]0/-180/발생하지 않습니다 .No match

대신, 쉘이 이를 전역 패턴으로 처리하지 않고 문자열을 문자 그대로 sed.

*(여기서 패턴에 0개 이상의 공백 문자를 허용하기 위해 누락된 내용 과 =대체 항목에서 누락된 내용도 추가했습니다.)

sed 's/=[[:space:]]*0/=-180/'

또는 원래 간격을 유지하십시오.

sed 's/\(=[[:space:]]*\)0/\1-180/'

답변2

다음을 사용하십시오sed표현하다:

sed 's/^\(xfirst[[:space:]]*=[[:space:]]*\).*/\1-180/' file

  • \1- 첫 번째로 캡처된 그룹을 가리킵니다(예: (xfirst....)).

답변3

또 다른 sed명령 방법.

sed '/^xfirst/ s/\d\+/-180/'

그 쯤.

sed '/^xfirst/ s/[0-9]+/-180/'

아니면 간단히 다음 0으로 교체하세요.-180

    sed '/^xfirst/ s/0/-180/'

관련 정보