2014-09-04 3 views
0

Концептуально я хотел бы достичь н так:Как передать вывод sed в команду cp?

sed 's|<pattern>|<replace>|' <filename> --> cp <sedoutput> <somewhere> 

В общем: Я хотел бы передать каждую строку из SED один за другим в другую команду, которая не принимает трубы так, вероятно, xargs Безразлично Не применяйте. Возможно, иногда мне даже хотелось бы добавить более одного места в список аргументов второй команды. Является ли это возможным?

+0

Что вы хотите сказать, не принимает трубку? – 2014-09-04 08:30:07

ответ

1

Просто используйте xargs

sed 's|<pattern>|<replace>|' file | xargs -i{} cp {} somewhere 
+0

Удивительный! До сих пор я не знал этого варианта – ardabro

2

Вы можете использовать command substitution:

cp "$(sed 's|<pattern>|<replace>|' filename)" somewhere 

Если СЭД производит вывод многострочного затем использовать process substitution:

while read -r f; do 
    cp "$f" somewhere 
done < <(sed 's|<pattern>|<replace>|' filename) 
+1

Он пишет «каждую строку sed», поэтому в результате есть несколько строк, в которых cp принимает только 2 файла/папку в качестве аргумента (+ параметры/параметры) и будет делать неожиданный результат. Думаю, – NeronLeVelu

+0

oh ok получил его. Я обновил его сейчас. – anubhava

+0

исчерпывающее решение +1 – NeronLeVelu

2
sed 's|<pattern>|<replace>|' filename | while read EachOccurrence 
do 
    cp "${EachOccurrence}" "${somewhere}" 
done 

читать обязательно может быть -r некоторые \ происходит в строках ввода

Смежные вопросы