Удалить двоеточие с помощью VI - PullRequest
2 голосов
/ 18 сентября 2009

Я пытаюсь найти и заменить в VI, чтобы удалить метку времени. Обычно я делаю это в VI с помощью команды S, но как мне сказать VI, что мне нужно удалять двоеточия, когда это часть структуры самой команды VI

EX: "xxxxx xxxxx 24:00:00 CDT"

пытался

s:24:00:00 CDT::g

s:"24:00:00 CDT"::g

s:/:::g

Любая помощь приветствуется.

Ответы [ 5 ]

6 голосов
/ 18 сентября 2009

Проблема здесь заключается не в совпадении двоеточия, а в том, что вас учили, что vim ДОЛЖЕН использовать двоеточие для разделения своего регулярного выражения. Это неверно.

awk / vi / perl / ruby ​​(и многие другие) позволяют вам указать, какой разделитель вам нужен. Этот символ следует за символом команды (в нашем случае символ S), например:

s/hello/there/
s:hello:there:
s@hello@there@

- это все те же регулярные выражения, только с разными разделителями. Эта гибкость означает, что если вы часто используете /, но затем вам нужно сопоставить / в регулярном выражении, то вы можете просто переключиться на какой-либо другой разделитель, например:

sMhel/loMthereM

Хотя «М» может быть не лучшим выбором, когда регулярное выражение содержит текст - это зависит от вашего стиля и того, что вы действительно соответствуете.

Вы даже можете использовать скобки. Для одного регулярного выражения это:

s[hello]

или

s(hello)

Я думаю, что для поиска и замены вы можете использовать s[hello][there] или, возможно, даже s[hello](there). Но это последнее предложение о скобках - наполовину запомненное предположение, когда я уже использовал perl.

3 голосов
/ 18 сентября 2009

Обычно vi использует символ, следующий за буквой команды, в качестве разделителя.

Попробуйте это:

s!24:00:00 CDT!!g
2 голосов
/ 18 сентября 2009

s/\d\+:\d\+:\d\+ CDT//g у меня работает:

начальное содержание:

xxxxx xxxxx 24:00:00 CDT

после команды:

xxxxx xxxxx

, если вы хотите быть уверенным, что это повлияет только на временные метки (например, приведенное выше регулярное выражение меняет любое число цифр> 1), используйте

s/\d\d:\d\d:\d\d CDT//g

где последний g меняет все вхождения шаблона, а не только первый.

Если у вас есть несколько часовых поясов в списке, сгруппируйте их:

:s/\d\+:\d\+:\d\+^Y \(CDT\|UDT\)//g
2 голосов
/ 18 сентября 2009

В моей версии vi я могу сделать следующее, чтобы удалить двоеточия из строки. YMMV.

:s/://g
1 голос
/ 18 сентября 2009

Это на самом деле не часть команды, так как она должна позволять вам использовать любой разделитель, который вам нравится.

Я бы наверное попробовал: -

%s/\d\{2}:\d{2}:\d{2}//g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...