4

Я пытался редактировать вывод файла с помощью sed. Содержимое файла

cat /tmp/Group_RM
t.p@k.p
t.m@k.k

Я пытался получить вывод как:

cat /tmp/Group_RM
t_p@k_p
t_m@k_k

Я попробовал приведенную ниже команду, но результат выглядел странно:

cat /tmp/Group_RM | sed 's/./_/g'

Выход:

____ ___
_______

sed заменяет все символы подчеркиванием. Когда я попытался заменить "_" на «.», Sed работает отлично.

2 ответа2

11

Вам нужно сбежать . как \. , . это специальный метасимвол, который соответствует любому отдельному символу.

$ sed 's/\./_/g' Group_RM
t_p@k_p
t_m@k_k

С другой стороны, cat не нужен - sed может работать с файлами сам.

4

Причина в том, что точка - это специальный символ в регулярных выражениях. Если вы имеете в виду реальную точку, вам нужно экранировать ее с помощью \.

Кроме того, вам не нужен cat, вы можете напрямую указать имя файла для sed. Это работает:

sed 's/\./_/g' myfile.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .