Удалить повторяющиеся и управляющие символы в sed - PullRequest
1 голос
/ 10 сентября 2011

Допустим, у меня есть слово в начале строки , например, HHEELLLLOO. Как я могу заменить повторяющиеся символы одиночными. Выход должен быть ПРИВЕТ.

Также кто-нибудь знает, как удалить или указать управляющие символы в sed, например, ^ H.

Ответы [ 4 ]

4 голосов
/ 10 сентября 2011

Вопрос 1

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

$ echo HHEELLLLOO | sed 's/\(.\)\1/\1/g'
HELLO

Это сделает это.

Вопрос 2

Может варьироваться в зависимости от вашей системы. Здесь (BSD) вы можете набрать ctrl-v ctrl-h, чтобы вставить буквенный символ возврата на одну позицию, который будет интерпретирован sed. Попробуйте.

$ cat file
H^HE^HL^HL^HO^H
$ sed 's/^H//g' file > new_file
$ cat new_file
HELLO
2 голосов
/ 10 сентября 2011

См. Ограничение повторения с этого сайта: http://www.regular -expressions.info / repeat.html

Реальный сценарий, вдохновленный chown и этим сайтом: sed 's / ([a-zA-Z]) \ 1 + / \ 1 / g'

Однако вы не сможете получить привет, вы получите только привет. Регулярное выражение не достаточно сложно, чтобы определить, что должно быть 2 л. Для этого вам нужно будет сопоставить слово со словарем. Хотя, вы можете использовать регулярное выражение для этого ... H + E + L + O +. , ,

Для управляющих символов \ 0xx будет соответствовать произвольным символам ASCII. Вам нужно посмотреть, что представляет собой ^ H.

2 голосов
/ 10 сентября 2011

Попробуйте удалить дубликаты: sed 's/\([a-zA-Z]\)\1\+/\1/g', но будет выдано «HELO», а не «HELLO».См. Другой ответ по причинам, почему это так.

0 голосов
/ 10 сентября 2011
$ echo BookKeeper | perl -pe 's/(.)\1+/$1/gi'
Bokeper

$ perl -le 'print "\cSome \cEvil \cControl \cMess\c?"' | perl -ple 's/\pC//g'
ome vil ontrol ess

Технически, управляющими символами являются \p{Cc}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...