Объединение двух команд 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
2 ответа
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 ''.
)
Использовать -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
Только с двумя командами, вероятно, не стоит использовать отдельный файл команд, но это очень удобно, если вам нужно выполнить много преобразований.