Как искать и заменять текстовые файлы с помощью & ldquo; / & rdquo;

У меня есть текстовый файл с ./. и вам нужно заменить его на 0|0.

Файл слишком велик, чтобы открыть его в Gedit и сделать это вручную.

Могу ли я сделать это с помощью sed?

0
задан 9 November 2017 в 18:11

6 ответов

[D0] Да. В этом случае полезно выбрать другой разделитель, такой как _, поэтому вам не нужно скрывать косую черту:

sed 's_\./\._0|0_'

Пример:

$ cat test ./. $ sed 's_\./\._0|0_' test 0|0

Добавить

-i, чтобы изменить файл на месте, а не печатать вывод на stdout, -i.b, чтобы сделать это, и сохранить резервную копию с .b в качестве расширения, а g - до конца выражение для изменения нескольких вхождений на строку, а не только первое (→ 's_\./\._0|0_g').

Объяснения

-i, чтобы изменить файл на месте, а не печатать вывод на stdout, s/A/B/g - заменить A на B и сделайте это g локально, поэтому не прекращайте делать это после первого поиска (в строке!) -i.b, чтобы сделать это, и сохраните резервную копию с .b в качестве расширения и 0|0 - буквальная строка 0|0
6
ответ дан 18 July 2018 в 03:35

Даже если вы попросили команду sed выполнить ваше требование, вы также можете попробовать выполнить команду ex.

ex -sc '%s/\.\/\./0|0/g|x' file

% выбрать все строки

s для замены

g заменить все экземпляры во всем мире

x записать, если сделанные изменения и выход

Пример: -

$cp file file.bak $cat file ./. $ex -sc '%s/\.\/\./0|0/g|x' file $cat file 0|0
1
ответ дан 18 July 2018 в 03:35

Да, вы можете сделать это с помощью sed. Вам нужно избежать . и / с помощью \.

sed -i.bak 's/\.\/\./0|0/g' file

-i.bak заставит sed редактировать файл на месте, но создает файл резервной копии с расширением .bak. [D1 ] g в конце означает «global» -> Заменяет все события.

4
ответ дан 18 July 2018 в 03:35

да. В этом случае рекомендуется выбрать другой разделитель, как _, таким образом, вам не придется бежать Слэш:

sed 's_\./\._0|0_'

пример:

$ cat test ./. $ sed 's_\./\._0|0_' test 0|0

Добавить

[F4] для того, чтобы изменить файл на месте, а не печатать в stdout, [F5], чтобы сделать так и сохранить резервную копию с .b как расширение и g в конце выражения, чтобы изменить несколько вхождений в строке, а не только первый (→нажать [F8]).

пояснения

[F4] для того, чтобы изменить файл на месте, а не печатать в stdout, s/A/B/g – замена A по B и сделает это [f17 в]lobally, так что не перестать это делать после первых поисках (на линию!) [F5], чтобы сделать так и сохранить резервную копию с .b как расширение и 0|0 – строковый литерал 0|0
6
ответ дан 24 July 2018 в 17:53
  • 1
    Собирался опубликовать ту же информацию. Забор пикета настолько трудно читать (и отлаживать). – Panther 9 November 2017 в 17:50

Даже если вы попросили команду sed выполнить ваше требование, вы также можете попробовать выполнить команду ex.

ex -sc '%s/\.\/\./0|0/g|x' file

% выбрать все строки

s для замены

g заменить все экземпляры во всем мире

x записать, если сделанные изменения и выход

Пример: -

$cp file file.bak $cat file ./. $ex -sc '%s/\.\/\./0|0/g|x' file $cat file 0|0
1
ответ дан 24 July 2018 в 17:53

Да, вы можете сделать это с помощью sed. Вам нужно избежать . и / с помощью \.

sed -i.bak 's/\.\/\./0|0/g' file

-i.bak заставит sed редактировать файл на месте, но создает файл резервной копии с расширением .bak. [D1 ] g в конце означает «global» -> Заменяет все события.

4
ответ дан 24 July 2018 в 17:53

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

Похожие вопросы: