Ubuntu

sed空格匹配問題

  • August 28, 2017

我有這個文件-

#
# 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

我在 Ubuntu 16.04 上試過這個

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

我得到

sed:No match

我哪裡錯了?

您忘記引用[[:space:]]glob 運算符並使用類似csh, tcsh,的 shell fish(儘管fish不支持[...]glob 運算符), zsh, bash -O failglob(很可能(t)csh給出錯誤消息)當 glob 無法匹配時(正確地)使命令失敗。

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錯誤。

相反,在這裡,您想引用它以使 shell 不將其視為 glob 模式並將字元串逐字傳遞給sed.

(在這裡,我還添加了缺失*以允許模式中包含 0 個或更多間距字元,以及=替換中的缺失):

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

或保留原始間距:

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

引用自:https://unix.stackexchange.com/questions/388838