У меня есть ASCII-файл со следующей структурой:
file1.png otherfile1.png
file2.png otherfile2.png
file3.png otherfile3.png
...
Я хочу заменить .png
с .mat
, но только для второго столбца. Результат должен быть похожим на это:
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/
поиск и замена \.
литеральная точка (без Escape это соответствует любому символу) $
конец строки Или явно указывать второй столбец, Вы могли использовать awk
путь...
$ awk 'gsub(".png", ".mat", $2)' file
file1.png otherfile1.mat
file2.png otherfile2.mat
file3.png otherfile3.mat
gsub(old, new, where)
поиск и замена $2
второй столбец Можно заменить весь .png
строки непосредственно в конце строки в INPUTFILE
как это:
sed 's/\.png$/.mat/' INPUTFILE
команда выше не изменит INPUTFILE
, но только распечатает измененную версию к терминалу.
Для прямого редактирования файла на месте добавьте эти -i
флаг к sed
(или -i.bak
для хранения резервного копирования исходного файла):
sed -i 's/\.png$/.mat/' INPUTFILE