Как редактировать этот файл, используя 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
и т.п.