Замените второй экземпляр строки в строке в ASCII-файле с помощью Bash

У меня есть 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?

5
задан 5 December 2016 в 15:19

2 ответа

Ну, если это - конец строки...

$ 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 второй столбец
13
ответ дан 23 November 2019 в 08:39

Можно заменить весь .png строки непосредственно в конце строки в INPUTFILE как это:

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

команда выше не изменит INPUTFILE, но только распечатает измененную версию к терминалу.

Для прямого редактирования файла на месте добавьте эти -i флаг к sed (или -i.bak для хранения резервного копирования исходного файла):

sed -i 's/\.png$/.mat/' INPUTFILE
7
ответ дан 23 November 2019 в 08:39

Другие вопросы по тегам:

Похожие вопросы: