2015-11-10 3 views
-10

Я пытаюсь удалить несколько тегов XML из многих файлов в папке. Я попробовал sed, но он работает только по одному файлу за раз.Запустить команду для всех файлов в каталоге

Это код sed, который я использовал для удаления из отдельных файлов. Папка, содержащая несколько файлов, называется rcv1.

sed -e 's/<[^>]*>//g' sk.xml 

a.xml 
b.xml 
c.xml 
d.xml 

код Я пытаюсь использовать это:

for file in *.xml do sed -e 's/v[^]*>//g' "$file" 

Edit: Предварение find ./ -type f -exec работал в сочетании с ответом fedorqui'S:

find ./ -type f -exec sed -i 's/<[^>]*>//g' {} \; 
+0

Mate им Старается удалить несколько XML-файлов, а не один, ив получил много в папке. Я просто знаю, чтобы сделать это в linux –

+0

Ваша цель - просто удалить * файл *, или вы пытаетесь сделать какую-то обработку * в * файле? – Makoto

+4

Примечание для будущих читателей: причина нечетного шаблона голосования была вызвана мета-дискуссией по этому вопросу: http://meta.stackoverflow.com/questions/309896/they-ask-i-answer-they-delete- Что я могу сделать-и-что-то-я-сделал? cb = 1 –

ответ

20

Если ваша команда sed работает для и вы хотите сделать то же самое для всех файлов, указанных в вашем файле rcv1, просто проведите содержимое содержимого файла, как указано в How can I read a file (data stream, variable) line-by-line (and/or field-by-field)?:

while IFS= read -r file 
do 
    sed -e 's/<[^>]*>//g' "$file" 
done < "rcv1" 

Это может быть, что вы хотите сделать это для всех файлов в заданной директории, вместо того, чтобы читать их из файла. В этом случае, перебрать файлы в текущем каталоге с помощью for цикла:

for file in * 
do 
    sed -e 's/<[^>]*>//g' "$file" 
done 

Кроме того, если вы хотите, чтобы эти файлы изменить, вы можете использовать -i таким образом, что изменения происходят на месте. То есть сам файл изменяется с новой версией. Для обеспечения безопасности скажем sed -i.bak, чтобы создать резервный файл.

Все вместе:

sed -i.bak -e 's/<[^>]*>//g' "$file" 
+3

Отличный @fedorqui – klashxx

+0

@ThomasAyoub спасибо:) Кажется, что только вчера я получил свой первый +1! – fedorqui

+1

@fedorqui конечно, * где-то *, вчера означает 3 года назад: p –

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