このファイルがあります -
#
# 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
私はどこで間違っていますか?
答え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
。
*
(ここでパターンにゼロ個以上の空白文字を許可するために、欠落している内容と=
代替項目から欠落している内容も追加しました。)
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/'