Назад | Перейти на главную страницу

Удаление текста из некоторых полей с разделителями в списке

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

Мой список выглядит так:
text text:number:text:text:text:text:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*

И я хочу, чтобы это выглядело так:
text text:*:*:*:*:text:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*

Поэтому некоторые поля, в которых есть данные, необходимо заменить звездочками, некоторые поля должны быть нетронутыми, а разделитель не согласован (первое и второе поля разделены пробелами). Это в файловой системе linux, и предпочтительнее сделать это встроенным в файл.

Большое спасибо за помощь!

Я бы использовал регулярное выражение, которое соответствует вашему тексту (скобки захватывают текст в буфер, обозначенный \ 1, \ 2 и т. Д.):

(.*):([0-9]+):(.*):(.*):(.*):(.*):(.*):(.*):(.*):(.*):(.*):(.*)

и заменяющее регулярное выражение:

\1:\2:\*:\*:\*:\6:\*:\*:\*:\*:\*:\*

с sed:

sed 's/matching-regularexpression/replacement-regular-expression/' name-of-text-file

Возможно, вам придется немного повозиться с escape-символами в зависимости от вашей оболочки.

Я бы, наверное, сделал это на perl:

perl -pi.bak -e 's / ^ (\ w + \ s \ w +): \ d +: \ w +: \ w +: \ w +: (. *) / $ 1: $ 2 /' ИМЯ ФАЙЛА