이 파일이 있어요 -
#
# 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:]]
쉘을 사용했습니다 .csh
tcsh
fish
fish
[...]
zsh
bash -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/'