ошибка sed - незавершенный шаблон замены

Я нахожусь в каталоге с файлами, состоящими из многих строк строк как это:

98.684807 :(float)
52.244898 :(float)
46.439909 :(float)

и затем строка, которая завершается:

[chuck]: cleaning up...

Я пытаюсь устранить :(float) из каждого файла (но отпуск число) и также удаляют ту чистку... строки.

Я могу добраться:

sed -ie 's/ :(float)//g' *

для работы но это создает файлы, который сохраняет старые файлы. Удаление-e отмечает результаты по незавершенной ошибке шаблона замены.

То же соглашение с:

sed -ie 's/[chuck]: cleaning up...//g' *

Мысли?

10
задан Pro Backup 27 October 2016 в 18:03
поделиться

5 ответов

Ваши числа разделены (float) символом :. Поэтому для получения чисел можно использовать awk/cut. Это проще, чем regex

$ head -n -1  file | awk -F":" '{print $1}'
98.684807
52.244898
46.439909

$ head -n -1  file | cut -d":" -f1
98.684807
52.244898
46.439909
3
ответ дан 3 December 2019 в 17:58
поделиться
sed -ie expression [files...]

эквивалентно

sed -ie -e expression [files...]

и оба означают применение выражения к файлам, перезаписывая файлы, но сохраняя старые файлы с «e» в качестве суффикса резервного копирования.

Я думаю, вы хотите: sed -i -e expression [файлы...]

Теперь, если вы получаете ошибку, что должно быть что-то не так с вашим выражением .

3
ответ дан 3 December 2019 в 17:58
поделиться

Проверьте, нет ли у вас странных имен файлов в каталоге.

Вот один из способов продублировать вашу ошибку:

$ touch -- "-e s:x:"
$ ls
-e s:x:
$ sed -i "s/ :(float)//g' *
sed: -e expression #1, char 5: unterminated `s' command

Один из способов защиты от этого - использовать двойное тире для завершения опций sed при использовании дикой карты:

$ sed -i "s/ :(float)//g' -- *

Вы можете сделать то же самое, чтобы удалить файл:

$ rm "-e s:x:"
rm: invalid option -- 'e'
$ rm -- "-e s:x:"
1
ответ дан 3 December 2019 в 17:58
поделиться
sed -i -e 's/ :(float)//g' *
1
ответ дан 3 December 2019 в 17:58
поделиться
sed  -i  ''  -e  's/:(float)//'  -e  '/^.chuck/d'  *

Таким образом, вы говорите sed не сохранять копию (резервное расширение нулевой длины до -i) и отдельно указываете команды sed.

13
ответ дан 3 December 2019 в 17:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: