Объединение 2 команд sed

У меня есть файл r. Я хочу заменить слова File и MINvac.pdb в нем ничем. Используемая мной команда:

sed -i 's/File//g' /home/kanika/standard_minimizer_prosee/r

и

sed -i 's/MINvac.pdb//g' /home/kanika/standard_minimizer_prosee/r

Я хочу объединить обе команды sed в один, но я не знаю, как это сделать. Может ли кто-нибудь помочь?

Файл выглядит так:

-6174.27    File10MINvac.pdb
-514.451    File11MINvac.pdb
4065.68     File12MINvac.pdb
-4708.64    File13MINvac.pdb
6674.54     File14MINvac.pdb
8563.58     File15MINvac.pdb

Ответ 1

sed - это язык сценариев. Вы разделяете команды с точкой с запятой или новой строкой. Многие диалекты sed также позволяют передавать каждую команду в качестве отдельного аргумента параметра -e.

sed -i 's/File//g;s/MINvac\.pdb//g' /home/kanika/standard_minimizer_prosee/r

Я также добавил обратную косую черту, чтобы правильно процитировать буквальную точку перед pdb, но в этом ограниченном контексте, который, вероятно, неважен.

Для полноты здесь представлен вариант новой строки. Многие новички сбиты с толку, что оболочка разрешает буквенные символы новой строки в цитируемых строках, но это может быть удобно.

sed -i 's/File//g
    s/MINvac\.pdb//g' /home/kanika/standard_minimizer_prosee/r

Конечно, в этом ограниченном случае вы также можете объединить все в одно регулярное выражение:

sed -i 's/\(File\|MINvac\.pdb\)//g' /home/kanika/standard_minimizer_prosee/r

(Некоторые диалекты sed будут нуждаться в этом без обратных косых черт и/или предлагают возможность использовать расширенные регулярные выражения, где их следует опустить. BSD sed, а значит, и MacOS sed, требует обязательного аргумента до sed -i, который может быть пустым, например sed -i ''.)

Ответ 2

Используйте флаг -e:

sed -i -e 's/File//g' -e 's/MINvac.pdb//g' /home/kanika/standard_minimizer_prosee/r

Как только вы получите больше команд, чем удобно определить с помощью -e s, лучше сохранить команды в отдельном файле и включить его с флагом -f.

В этом случае вы создадите файл, содержащий:

s/File//g
s/MINvac.pdb//g

Позвоните в этот файл "sedcommands". Затем вы будете использовать его с sed следующим образом:

sed -i -f sedcommands /home/kanika/standard_minimizer_prosee/r

Только с двумя командами, вероятно, не стоит использовать отдельный файл команд, но это очень удобно, если у вас есть много преобразований.