次の内容の test.csv というファイルがあります。
T1,T2,T3,T4
10,2,3,17
10,2,5,14
10,2,2,16
15,1,17,15
12,1,9,25
4 列目の値 17 をすべて 25 に置き換えたいので、次のコマンドを試しました。
cat test.csv | sed -r 's/(([1-9]+,){3})17/\125/g'
T1,T2,T3,T4
10,2,3,17
10,2,5,14
10,2,2,16
15,1,17,15
12,1,9,25
ご覧のとおり、最後の行のみが変更され、2 番目の行は変更されていません。
ただし、そうすると、必要なcat test.csv | sed -r "s/([0-9]+,[0-9]+,[0-9]+,)17/\125/"
出力が得られます。何故ですか?