Как редактировать этот файл, используя grep или cat, используя vim или другой инструмент?

Один из моих старших братьев, который учится в статистике. Теперь он пишет свою дипломную работу на LaTeX. Почти все содержание написано для бумаги. И он взял 5 число после точки (например, 5.55534) для каждого значения, которые используются для его расчета. Но в последний раз его инструктор сказал, чтобы поменять их на 3 числа после точки (например, 5.555), что приводит моего брата в беду. Найти и исправить их вручную нелегко. Итак, он сказал мне, чтобы помочь.

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

      &se($\hat\beta_1$)&0.35581&0.35573&0.35573\\
                         &mse($\hat\beta_1$)&.12945&.12947&.12947\\
   \addlinespace
                         &$\hat\beta_2$&0.03329&0.03331&0.03331 \\
                          &se($\hat\beta_2$)&0.01593&0.01592&0.01591\\
                          &mse($\hat\beta_2$)&.000265&.000264&.000264 \\

                         \midrule
  {n=100} & $\hat\beta_1$&-.52006&-.52001&-.51946\\
                        &se($\hat\beta_1$)&.22819&.22814&.22795\\
                        &mse($\hat\beta_1$)&.05247&.05244&.05234\\
   \addlinespace
                         &$\hat\beta_2$&0.03134&0.03134&0.03133 \\
                         &se($\hat\beta_2$)&0.00979&0.00979&0.00979\\
                         &mse($\hat\beta_2$)&.000098&.000098&.000098

Мне нужно -

      &se($\hat\beta_1$)&0.355&0.355&0.355\\
                         &mse($\hat\beta_1$)&.129&.129&.129\\
......................................................................
........................................................................
........................................................................

Примечание: не скучайте по синтаксису (это синтаксис LaTeX).

Если у кого-то есть решение или предложение, пожалуйста, предоставьте. Спасибо.

2 ответа

Решение

В седе:

$ sed 's/\(\.[0-9]\{3\}\)[0-9]*/\1/g' file
      &se($\hat\beta_1$)&0.355&0.355&0.355\\
                         &mse($\hat\beta_1$)&.129&.129&.129\\

то есть. замените начальные числовые строки периода не менее чем с 3 числами на начальный период и три первых числа.

Вот команда в vim:

:%s/\.\d\{3}\zs\d\+//g

Объяснение:

: вход в командный режим

% это диапазон всех строк файла

s команда замещения

\.\d\{3}\zs\d\+ шаблон, который вы хотели бы изменить

  • \. буквальная точка (.)

  • \d\{3} сопоставить 3 цифры подряд

  • \zs начать замену отсюда

  • \d\+ одна или несколько цифр

g Заменить все вхождения в строке


Что касается grep а также cat они не имеют ничего общего с заменой текста. Эти команды предназначены только для поиска и печати содержимого файлов.

Вместо этого, то, что вы ищете, это подстановка, в Linux есть много команд, которые могут сделать это в основном sed, perl, awk, ex и т.п.

Другие вопросы по тегам