Ubuntu
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
我在 Ubuntu 16.04 上試過這個
sed s/=[[:space:]]0/-180/
我得到
sed:No match
我哪裡錯了?
您忘記引用
[[:space:]]
glob 運算符並使用類似csh
,tcsh
,的 shellfish
(儘管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/'