LINUX.ORG.RU

синтаксис

 , ,


0

1

как в

find -type f -name "name" -exec 
запихать выражение
sed '1,/pat1/d'  '{}' | sed '/pat2/,$d' > '{}'.fix
И почему у меня не работает, если просто вставить и добавить
\;
?


ответ: никак. Дело в том, что это ДВА разных процесса (в конвейере), которые выполняются параллельно.

но можно сделать одной командой.

sed '1,/pat1/d' '{}' | sed '/pat2/,$d' > '{}'.fix

sed -i*.old '1,/pat1/d;/pat2/,$d' {}

правда тут новый файл будет иметь старое имя, а старый с расширением old будет.

emulek
()
Ответ на: комментарий от emulek
ДВА разных процесса (в конвейере), которые выполняются параллельно

я ниче не понял, а можно разжевать для простого смертного?

wormad
() автор топика
Ответ на: комментарий от wormad

ну когда ты пишешь sed|sed, то bash запускает СРАЗУ две sed, направляя вывод одной sed в другую sed. А когда ты пишешь find -exec, то синтаксически после exec идёт ОДНА команда, и твой $ в лучшем случае как параметр интерпретируется. Причём КОМАНДА, т.ч. упороться и написать find -exec eval у тебя не получится.

Но при желании конечно можно всё. Вплоть и до такого говнокода:

$ find -exec bash -c "echo ss | sed 's/.*/\U&/'" \;

только боже упаси тебя рассказывать кому-то, что это я тебе посоветовал.

emulek
()
#!/bin/bash -x

echo -e "1\n2\npat2\n3\npat1\n4\n5\n6\npat2\n7\n8\n9\n" >name

sed '1,/pat1/d' name | sed '/pat2/,$d'
find -type f -name "name" \
-exec sed -n '
1,/pat1/d;
/pat2/,$d;
w '{}'.fix' \
{} \;

cat name.fix
anonymous
()

-exec sh -c 'command1 | command2' \;

// google-fu in action

i-rinat ★★★★★
()
Последнее исправление: i-rinat (всего исправлений: 1)

sed '1,/pat1/d' '{}' | sed '/pat2/,$d' > '{}'.fix

поправка: 2 процесса + перенаправление. у тебя получится каша в файле '{}'.fix,состоящая из всех файлов, найденных по паттерну.
Вообще перенаправление в цикле неблагодарная вещь.


А анонимус с скриптом прав.

takino ★★★★★
()
Ответ на: комментарий от emulek

РЕШЕНО

спасибо

find -type f -name "*.txt" -exec sed -i*.old '1,/PAT1/d;/PAT2/,$d' '{}' \;

wormad
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.