Метод 1 будет работать, если вы сделали это правильно. lsearch
возвращает один результат по умолчанию, а критерии поиска принимают шаблон шара. Использование .
будет искать только элемент, равный .
. Затем вам понадобится цикл для lreplace
:
set idx [lsearch -all $list1 "*.*"]
foreach id [lsort -decreasing $idx] {
set list1 [lreplace $list1 $id $id]
}
Сортировка в порядке убывания важна, потому что индекс элементов будет меняться при удалении элементов (также обратите внимание, что вы использовали неправильное имя переменной в ваших фрагментах кода.
Метод 2 также будет работать, если вы использовали правильное регулярное выражение:
set b [regsub -all -line {.*\..*} $list1 ""]
Но в этом случае вы, вероятно, захотите обрезать результаты. .*
будет соответствовать любым символам, кроме новой строки.
Я бы использовал, например, lsearch
, что позволяет избежать необходимости замены:
set mylist [lsearch -all -inline -not $list1 "*.*"]
]