Как убрать пробел между разными символами в строке, используя sed? - PullRequest
1 голос
/ 29 августа 2011

Я хочу удалить пробел между двумя разными символами, разделенными пробелом.

Например,

В строке "hello world doddy" в строке я хочу удалить пробел между hello и world (но сохранить пробел между world и doddy, поскольку шаблон dd необходимо сохранить).

Я пытался:

$ echo "hello world doddy" | sed 's/\(.\) \([^\1]\)/\1\2/g'

Но в итоге получил

helloworlddoddy

Ответы [ 2 ]

2 голосов
/ 29 августа 2011

Подготовьте строку, сначала удвоив пробел между двумя одинаковыми символами. Промежуточный пробел переходит от двух одинаковых символов к одному из символов и пробелу, поэтому все пробелы можно проверить одинаково.

echo "hello world doddy" | sed -e 's/\(.\) \1/\1  \1/g' -e 's/\(.\) \(.\)/\1\2/g'
2 голосов
/ 29 августа 2011

Вы не можете использовать обратную ссылку внутри класса символов.

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

echo "hello world doddy" |
sed 's/\([^ ]\) \1/\1<<>>\1/g;s/\([^ ]\) \([^ ]\)/\1\2/g;s/<<>>/ /g'

Редактировать: изменено . на [^ ], чтобы избежать использования двойных пробелов, просто чтобы быть более точным. Спасибо за предложение.

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