вывод sed записан во входной файл

Я борюсь с другой проблемой, на этот раз связанной с перенаправлением вывода в файл (>). У меня есть несколько файлов с именем foo-ab.in foo-abc.in foo-abcd.in bar-ab.in bar-abc.in bar-abcd.in, и я хочу просмотреть каждый файл, изменить некоторые небольшие часть его с помощью sed, а затем переписать результаты во что-то вроде foo-ab2.in, foo-abc2.in и foo-abcd2.in для каждого файла. На данный момент у меня есть:

for file in foo bar; do sed -n 's/text to change/replacement/ p' $file*.in> &1; done

однако я получаю сообщение об ошибке:

-bash: syntax error near unexpected token `&'

Я понимаю, что, вероятно, делаю все неправильно, но я хочу добиться этого:

for file in foo bar; do sed -n 's/text to change/replacement/ p' $file*.in > $file*2.in; done

где $file*2.in имеет то же имя, что и $file.in, с добавлением 2 посередине, но поскольку существует несколько foo с окончанием ab, abc или abcd, я не знаю, как это сделать. Моя команда sed уже разработана, это просто правильное имя файла для вывода меня сбивает с толку.


person Chemist612    schedule 25.03.2016    source источник


Ответы (1)


По-видимому, ответ, подобный этому, уже существует здесь: файлы ввода с подстановочными знаками

Но для ясности и ради закрытия вопроса ответ - изменить команду следующим образом:

for file in foo*.in bar*.in; do sed -n 's/text to change/replacement p' $file > "${file%.*}"2.in; done

теперь он вводит файл foo-ab.in через файл foo-abcd.in, изменяет sed и выводит файл foo-ab2.in через foo-abcd2.in (и то же самое для bar * .in).

person Chemist612    schedule 25.03.2016