Вы можете отфильтровать все строки с помощью grep, используя регулярное выражение.
grep '[a-z-]1\?\.domain_name' file > newfile
Это возвращает все строки с буквами или минусом и необязательным 1
перед «.domain _name».
Обратной операцией будет удаление всех строк, содержащих числа > 1, перед «.domain _name»:
grep -v '\([2-9]\|[0-9]1\)\.domain_name' file > newfile
Соответствует строкам с цифрами от 2 до 9 в качестве последней цифры перед ".domain _name" или числам, состоящим как минимум из двух цифр, где последняя цифра1
(соответствует 11 или 21 и т. д. ). Опция -v
используется для выбора строк, не соответствующих -.
относительно вашего perl -решения :из-за конструкции -p предоставленный сценарий обрабатывает ввод построчно. Это затрудняет соединение строк, поскольку линия не знает, что следует за ней.
Когда вы обрабатываете ввод как одну строку, вы можете делать умные замены для соединения строк. Вот пример, похожий на ваш способ вызова perl:
perl -e 'local $/;my $data = <>; $data =~ s/\nTiming/ Timing/g ; print $data' file1
Этот скрипт считывает весь ввод в одну строку ($data )и заменяет новую строку перед Timing пробелом. Это происходит для всех вхождений (g переключатель для глобального после замены)
Опаздываю на шоу, но если расстояние не проблема, то....
awk -v RS="pure info: " 'NR>1{$1=$1; print RS$0}' file
Просто используйте pure info:
в качестве разделителя записей RS
, перекомпонуйте $1=$1
и print
в началеRS
pure info: myjob-relaed_rawmaterila Timings: Full
pure info: Check-platform-Log-90Days Timings: Full Timings: Incremental
pure info: Check-vitorydows-Log-90Days Timings: Full Timings: Incremental
pure info: Note_michael Timings: Full
pure info: adhoc-activity-myjob-platform Timings: Full
pure info: adhoc-activity-myjob-vitory Timings: Full
pure info: adhoc-myjob-platform-03 Timings: Full Timings: Full-1month
pure info: adhoc-onetime-myjob-hotcase Timings: Full
pure info: adhoc-onetime-myjob-platform
И если вы отчаянно нуждаетесь в расстоянии, тогда gsub
один назад в...
awk -v RS="pure info: " 'NR>1{$1=$1; gsub("Timings:","Timings: ",$0);print RS$0}' file
pure info: myjob-relaed_rawmaterila Timings: Full
pure info: Check-platform-Log-90Days Timings: Full Timings: Incremental
pure info: Check-vitorydows-Log-90Days Timings: Full Timings: Incremental
pure info: Note_michael Timings: Full
pure info: adhoc-activity-myjob-platform Timings: Full
pure info: adhoc-activity-myjob-vitory Timings: Full
pure info: adhoc-myjob-platform-03 Timings: Full Timings: Full-1month
pure info: adhoc-onetime-myjob-hotcase Timings: Full
pure info: adhoc-onetime-myjob-platform
Perl one -лайнер:
perl -0777 -pe 's/\n(?=Timings:)/ /g' file
Опция -0777 заставляет Perl запихивать весь файл в $_
. Затем все новые строки, которые появляются перед «Times :», заменяются.
Если есть другие заголовки помимо «Время», вы можете использовать отрицательный вид -вперед:
s/\n(?!pure info:)/ /g