Я рекомендовал бы использовать clonezilla. Вот хорошее учебное руководство, которое обойдет Вас, через большинство как клонировать Вас существующий раздел VMs к новому, который Вы создали на 2-м виртуальном устройстве.
Вот то, что я придумал:
awk '
/END_OF_LINE/{ matched = 1} # When you find END_OF_LINE set the matched flag
{
if( matched == 0) # If you haven't matched END_OF_LINE yet
print $4" "$5" "$6 # ...print the required fields
else # If you have already found END_OF_OLINE
print $0 # ...print the whole line
}' your_file
но я не awk
парень: я уверен, что это может быть лучше оптимизировано.
Это легче сделанный в sed.
sed -n '1,/END_OF_LINE/ {s/^\([^ ]* \)\{3\}\(.*\)$/\2/p};/END_OF_LINE/,$p' file.txt
/END_OF_LINE/
, это печатает все поля от 4 на. OP только хочет поля 4 - 6. Плюс, если там ведут пробелы как в примере OP, он будет рассматривать первое пространство как поле и печатать все от 3-го на.
– terdon♦
27.12.2013, 15:44
Вот пара. awk
каждый - просто решение Joseph, но записанный более кратким способом. Все они полагаются на ту же основную идею. Просто установите переменную на 1, когда подобранная строка найдена, и проверьте, что значение переменной для решения, что распечатать.
awk
awk '/END_OF_LINE/{ m = 1}(m==0){print $4,$5,$6; next}1;' file.txt
Perl
perl -alne '$m++ if /END_OF_LINE/; $m==0? print "@F[3..5]" : print; ' file.txt
Волшебство находится в perl
опции:
- повороты на режиме авторазделения при использовании с-n или-p. Неявная команда разделения к массиву @F сделана как первая вещь в неявном цикле с условием продолжения, произведенном-n или-p.
Это заставляет его действовать по существу как awk
. -n
просто средства обрабатывают входной файл линию за линией и -l
средства добавляют новую строку к каждому оператору печати (это означает намного больше, но это - то, что это делает здесь). Наконец, -e
просто способ передать сценарий командной строке.