Интересно, какой самый быстрый способ - удалить текст только из некоторых полей с разделителями в списке.
Мой список выглядит так:
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 /' ИМЯ ФАЙЛА