В файле Temp имеется только номер 22.5.Основной вопрос SED для Linux
Я использую
sed 's/.//' Temp
и я ожидаю, 225, но получить 2,5
Почему?
В файле Temp имеется только номер 22.5.Основной вопрос SED для Linux
Я использую
sed 's/.//' Temp
и я ожидаю, 225, но получить 2,5
Почему?
Потому что '.' является регулярным выражением, которое соответствует любому символу. Вы хотите 's/\.//'
Точка - это особый символ, означающий «соответствовать любому персонажу».
$ sed s/\\.// temp
225
Можно было бы подумать, что вы могли бы сделать sed s/\.// temp
, но ваша оболочка будет бежать, что один обратный слэш и передать s/.//
к СЭД .. Так что, вам нужно поставить два обратных слэша, чтобы передать дословный обратный слэш SED, который правильно будет обрабатывают \.
как буквальную точку. Или, вы можете процитировать команду, чтобы сохранить буквальный символ обратной косой черты:
$ sed "s/\.//" temp
225
Причина вы получаете 2.5, когда вы делаете s/.//
является то, что точка совпадает с первого символа в файле и удаляет его.
'.' является особенным: он соответствует любому одиночному символу. Таким образом, в вашем случае выражение sed соответствует первому символу в строке. Попробуйте избежать его, как это:
s /\.//
Не похоже, что вы сбежали отсюда. – Telemachus
Хех. Похоже, виджет редактирования ест обратную косую черту. Мне нужно было избежать побега, чтобы он появился :) – Ned
.
является символом подстановки для любого символа, поэтому первый символ заменяется ничем, то СЭД сделано.
Вы хотите sed 's/\.//' Temp
. Обратная косая черта используется для выхода из специальных символов, чтобы вернуть их номинал.
вы также можете использовать AWK
awk '{sub(".","")}1' temp
+1 - хорошо заявил сэр! – Buggabill