Найти часть текста в строке, а затем добавить ее в другую часть той же строки

Si tiene escasez de memoria y no puede permitirse el lujo de actualizar la RAM, es mejor que encuentre formas de liberar algo de memoria en su servidor. En general, existen muchos procesos/servicios que quizás no necesite. Por ejemplo, en un sistema de servidor no se requiere el servicio de impresión de "tazas". Así que identifique todos esos servicios y desactívelos.

No hay nada de malo en agregar un "intercambio" adicional, pero tenga en cuenta que no es un reemplazo de la RAM. Sus aplicaciones experimentan una degradación grave del rendimiento si comienzan a utilizar el intercambio.

0
02.06.2019, 06:22
3 ответа

Предполагая, что ваши данные находятся в файле test.txt, должна работать следующая команда

sed -E 's/^(.*)([[:digit:]]{5})(.*)$/\1\2\3\/\2/g' test.txt

Если вы не читаете непосредственно из файла,

input_source | sed -E 's/^(.*)([[:digit:]]{5})(.*)$/\1\2\3\/\2/g'

Выход:

Issue #12345: some more text here https://some.domain/some/path/12345

Что делает команда:

^(.*)Начать с начала файла и захватить все до следующего совпадения ([[:digit:]]{5})соответствует следующим 5 цифрам (.*)$захватить все до конца файла \1\2\3\/\2каждая совпадающая группа пронумерована (1 -3 в данном случае )и мы форматируем вывод, чтобы получить исходный текст (соответствует 1 -3 ), '/' и затем второй матч.

Для дальнейшего использования было бы идеально, если бы вы описали свою проблему более конкретно. Например, скажите, что вы ищете первые 5 цифр в строке и хотите добавить эти цифры (с предшествующей косой чертой )в конец строки, и сделайте это для каждой строки во входных данных. Я предположил, что это то, что вы имели в виду. Если нет, вы можете обновить свой вопрос, чтобы он был более конкретным.

Вы также можете перечислить некоторые попытки, которые вы предприняли, вместо того, чтобы просто цитировать предыдущие вопросы. Также помогает нам лучше понять, что вы пытаетесь сделать.

0
28.01.2020, 03:38
sed 's,\([[:digit:]][[:digit:]]*\).*,&/\1,' file

или, если ваш sedимеет -Eработу с расширенными регулярными выражениями в шаблонах,

sed -E 's,([[:digit:]]+).*,&/\1,' file

Выражение подстановки sedнаходит первое положительное целое число (строку цифр )в строке и фиксирует ее. Он также соответствует остальной части строки от этой точки до конца строки. Замещающая часть выражения заменяет совпадающий бит строки всем, что было сопоставлено (&), за которым следует косая черта и захваченная строка цифр.

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

sed -E 's/([[:digit:]]+).*/&\/\1/' file

Приведенные выше команды будут выполнять замену во всех строках ввода. Чтобы ограничить его строками, начинающимися только со строки Issue #, используйте

sed -E '/^Issue #/s,([[:digit:]]+).*,&/\1,' file
0
28.01.2020, 03:38

Я сделал по методу ниже

команда

i=`awk '{print $2}' file.txt| sed "s/^#//g"| sed "s/:$//g"`
awk -v i="$i" '{print $0"/"i}' filetxt

выход

Issue #12345: some more text here https://some.domain/some/path/12345
0
28.01.2020, 03:38

Теги

Похожие вопросы