次の構造を持つASCIIファイルがあります。
file1.png otherfile1.png
file2.png otherfile2.png
file3.png otherfile3.png
...
.png
を.mat
に置き換えますが、2列目のみです。結果は次のようになります。
file1.png otherfile1.mat
file2.png otherfile2.mat
file3.png otherfile3.mat
...
Bashでこれを行うにはどうすればよいですか?
まあ、それが行の終わりなら...
$ sed 's/\.png$/.mat/' file
file1.png otherfile1.mat
file2.png otherfile2.mat
file3.png otherfile3.mat
s/old/new/
検索および置換\.
リテラルドット(エスケープなしで任意の文字に一致)$
行末または、2番目の列を明示的に指定するには、awk
の方法を使用できます...
$ awk 'gsub(".png", ".mat", $2)' file
file1.png otherfile1.mat
file2.png otherfile2.mat
file3.png otherfile3.mat
gsub(old, new, where)
検索および置換$2
2列目次のように、すべての.png
文字列を直接置き換えることができます行末INPUTFILE
sed 's/\.png$/.mat/' INPUTFILE
上記のコマンドはINPUTFILE
を変更せず、変更されたバージョンを端末に出力するだけです。
ファイルを直接編集するには、-i
フラグをsed
(または-i.bak
に追加して元のファイルのバックアップを保存します):
sed -i 's/\.png$/.mat/' INPUTFILE