Убрать текст из некоторых разделенных полей в списке
Интересно, какой самый быстрый способ был бы вырезать текст только из некоторых разделенных полей в списке.
Мой список выглядит так:text text:number:text:text:text:text:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*
И я хочу, чтобы это выглядело так:text text:*:*:*:*:text:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*:*
Поэтому некоторые поля, содержащие данные, должны быть заменены звездочками, некоторые поля должны быть не тронуты, а разделитель не согласован (первое и второе поля разделены пробелами). Это на файловой системе Linux, и способ сделать это встроенным в файл является предпочтительным.
Большое спасибо за помощь!
2 ответа
Я бы использовал регулярное выражение, соответствующее вашему тексту (скобки записывают текст в буфер, обозначенный \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 /' FILENAME