Use 2 particiones raíz separadas y 1 compartida /home. Luego, debe actualizar los 2 sistemas de forma independiente.
Вот Perl-решение:
$ perl -pe 's/(\d+:.*?)(?=\d+:|$)/$1\n/g' file
random_string
83: some words
45: large error report
326: send emails to certain peple
random_string
34: some words
143: job success
(\d+:.*?)
:соответствует одному или нескольким числам (\d+
), за которыми следует :
, а затем наименьшая строка (?
в .*?
делает ее не-жадной, она остановится, как только появится первая найдено совпадение ), соответствующее остальной части регулярного выражения. Здесь это будет продолжаться до части, описанной ниже. (?=\d+:|$)
:(?=foo)
называется положительным прогнозом . Он будет совпадать, но то, что совпало, не будет включено в фактический результат. Таким образом, bar(?=foo)
будет соответствовать всем случаям bar
, за которыми следует foo
. Здесь мы ищем либо строку чисел, за которой следует :
(\d+:
), либо конец строки ($
). Теперь оператор подстановки заменит все вхождения первого шаблона на себя и новую строку, что должно дать вам желаемый результат.
awk
кажется, помогает:
$ awk '{ for( i=1; i<=NF; i++ ) { if( match( $i, ":" ) ) { printf "\n" } printf( "%s ", $i ) } }' /path/to/file
random_string
83: some words
45: large error report
326: email certain people random_string
34: some words
143: job success
Сравнивая ваш ввод с выводом, кажется, что ваше описание того, что вы хотите, неверно. Вы говорите «Я хочу настроить шаблон#:(на число, за которым следует двоеточие )и добавить новую строку после» , хотя более точным описанием было бы:
Этот sed
скрипт реализует это. Он использует расширенные регулярные выражения(-E
)вместо базового регулярного выражения sed
по умолчанию, чтобы свести к минимуму количество необходимых экранов обратной косой черты и улучшить читаемость.
$ sed -E -e '2,$ {s/ ([0-9]+:)/\n\1/g; s/^[^0-9]/\n&/}' file.txt
random_string
83: some words
45: large error report
326: send emails to certain peple
random_string
34: some words
143: job success
Кстати, если перед [0-9]+:
есть табуляция, а не пробелы, или несколько пробелов, используйте [[:space:]]+
вместо пробела. например.
sed -E -e '2,$ {s/[[:space:]]+([0-9]+:)/\n\1/g; s/^[^0-9]/\n&/}' file.txt