Если вы еще ничего не сохранили, нажмите клавишу UNDO "U".
Вы также можете попробовать проверить файл подкачки.
Он должен иметь имя yourfilename.swp
или . yourfilename.swp
, в том же каталоге
или /var/tmp
. Обязательно используйте ls -la
в случае, если имя начинается с .
.
Сделайте копию и откройте ее, чтобы проверить содержимое.
$ cat ip.txt
foo-11.11-fo.o-foo-bar
bar-foo-11.11-22.11
$ rev ip.txt
rab-oof-o.of-11.11-oof
11.22-11.11-oof-rab
$ rev ip.txt | cut -d- -f3- | rev
foo-11.11-fo.o
bar-foo
Инвертируйте каждую строку, затем используйте cut
для выбора всех полей, кроме первых двух, а затем снова инвертируйте вывод
Вы также можете использовать perl
, но вы будете печатать пустые строки, если любая строка ввода имеет менее 3 полей
$ perl -F'-' -lane 'print join "-", @F[0..$#F-2]' ip.txt
foo-11.11-fo.o
bar-foo
Укажите -
в качестве разделителя ввода, а затем распечатайте все поля, кроме двух последних
Использованиеsed
:
$ sed 's/-[^-]*-[^-]*$//' file
foo-11.11-fo.o
bar-foo
Это удалит -X-X
в конце каждой строки в file
, где X
— любая строка, не содержащая -
.
Если строки находятся в переменной оболочки:
$ s='foo-11.11-fo.o-foo-bar'
$ printf '%s\n' "${s%-*-*}"
foo-11.11-fo.o
$ s='bar-foo-11.11-22.11'
$ printf '%s\n' "${s%-*-*}"
bar-foo
или в массиве bash
:
$ s=( 'foo-11.11-fo.o-foo-bar' 'bar-foo-11.11-22.11' )
$ printf '%s\n' "${s[@]%-*-*}"
foo-11.11-fo.o
bar-foo
Это удаляет все, что соответствует шаблону -*-*
в конце строки в переменной s
посредством сопоставления/удаления шаблона суффикса. В случае, когда s
в массиве, удаление выполняется для всех элементов массива.