2016-12-05 21 views
0

Я копирую файлы php с удаленного веб-сервера из telnet. Я использовал [это] [1] командасплит-файлы, сложенные хвостом

tail -n +1 file1.txt file2.txt file3.txt 

для конкатенации, но теперь я хочу разделить этот файл на отдельные файлы.

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

grep -irn "==>" php.dump |cut -d: -f1 

grep -irn "==>" php.dump |cut -d' ' -f2 

сейчас я хочу использовать эту информацию для разделения файлов.

Это длинный подход, вы можете предложить вам прямой подход. или что-нибудь делать после этих двух команд

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

Заранее спасибо

Примечания: Я знаю, что это было бы легко с дегтем, но, к сожалению, нет команды дегтя и не имеет корневую привилегию на этот сервер.

cat multiple files but include filename as headers

+1

Не комбинировать их в первую очередь? 'Для i в {1,2,3}; сделать tail -n +1" файл $ {i} .txt ">" newfile. $ {1} "; done'. – 123

+0

привет спасибо за ответ, но вся причина, по которой я делаю это как замену смолы. поскольку tar объединяет файлы и выдержки на другой машине. Я делаю это с командой tar, поскольку она недоступна. – Devidas

+0

Почему вы просто не переносите файлы? В попытке эмулировать деготь в буквальном смысле нет никакой пользы. – 123

ответ

0

Поскольку вы используете бедные жених tar -c здесь бедные мужчины tar -x:

$ awk 'match($0, /^==> (\w+) <==$/, res) { file = res[1]; next } 
             { print > file".new" }' comb_file.txt 

С вводом как:

==> file1 <== 
hello1 

==> file2 <== 
hello2 

==> file3 <== 
hello3 

Три файлы будут создано: file1, file2 и file3, каждая из которых содержит линии между ==> xxx <==.

Это означает, что задняя пустая строка будет добавлена ​​к file1 и file2. Но это может начаться.

+0

привет, я попробовал для данного дампа, но у меня есть имя файла, например /var/www/index.php, так что это не сработало, но оно действительно сработало для вашего дампа. Вы можете предложить что-то общее. – Devidas

+0

@Devidas Должно быть возможно изменить на ваш необходимо, например, удалить dirname: '/^==> ([^ \ /] * \ /) * ([^ \ /] +) <== $ /', а затем использовать 'res [2]'. – andlrc

+0

Проблема заключается в регулярном выражении, который ищет все слова, но он получает пространственные символы, например /, поэтому он не соответствует – Devidas