web-dev-qa-db-ja.com

Bashを使用して、ASCIIファイルの行の文字列の2番目のインスタンスを置き換えます

次の構造を持つ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でこれを行うにはどうすればよいですか?

5
mcExchange

まあ、それが行の終わりなら...

$ 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列目
13
Zanna

次のように、すべての.png文字列を直接置き換えることができます行末INPUTFILE

sed 's/\.png$/.mat/' INPUTFILE

上記のコマンドはINPUTFILEを変更せず、変更されたバージョンを端末に出力するだけです。

ファイルを直接編集するには、-iフラグをsed(または-i.bakに追加して元のファイルのバックアップを保存します):

sed -i 's/\.png$/.mat/' INPUTFILE
7
Byte Commander