2009-10-31 2 views

ответ

3

Потому что '.' является регулярным выражением, которое соответствует любому символу. Вы хотите 's/\.//'

7

Точка - это особый символ, означающий «соответствовать любому персонажу».

$ sed s/\\.// temp 
225 

Можно было бы подумать, что вы могли бы сделать sed s/\.// temp, но ваша оболочка будет бежать, что один обратный слэш и передать s/.// к СЭД .. Так что, вам нужно поставить два обратных слэша, чтобы передать дословный обратный слэш SED, который правильно будет обрабатывают \. как буквальную точку. Или, вы можете процитировать команду, чтобы сохранить буквальный символ обратной косой черты:

$ sed "s/\.//" temp 
225 

Причина вы получаете 2.5, когда вы делаете s/.// является то, что точка совпадает с первого символа в файле и удаляет его.

+0

+1 - хорошо заявил сэр! – Buggabill

0

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

s /\.//

+0

Не похоже, что вы сбежали отсюда. – Telemachus

+0

Хех. Похоже, виджет редактирования ест обратную косую черту. Мне нужно было избежать побега, чтобы он появился :) – Ned

1

. является символом подстановки для любого символа, поэтому первый символ заменяется ничем, то СЭД сделано.

Вы хотите sed 's/\.//' Temp. Обратная косая черта используется для выхода из специальных символов, чтобы вернуть их номинал.

0

вы также можете использовать AWK

awk '{sub(".","")}1' temp