Ничего не зная о формате, это работает для двух указанных вами значений:
while read
do
echo "${REPLY%-*-*}"
done < file1
Предположим, вам нужны все символы в строке, пока вы не найдете цифру. А затем исключите необязательный -
перед этой цифрой:
sed 's/-\{0,1\}[[:digit:]].*//' your-file
(на GNU sed
, вы можете заменить \{0,1\}
на \?
. Или sed -E 's/-?[[:digit:]].*//'
с некоторым ).
Это должно обрабатывать ваши примеры, хотя без подробностей я не могу сказать, что оно будет обрабатывать все в вашем файле.
Если вы хотите изменить свой файл в -месте, с некоторыми реализациями sed
, вы можете добавить -i.bak
к команде sed (резервирует файл в your-file.bak
, вносит изменения вyour-file
)или добавьте > new-file
в конце, чтобы написать new-file
с результатами
Чтобы удалить все после первой цифры, перед которой стоит тире (, а также цифру тире -):
sed 's/-[0-9].*//' file
С данными, указанными в вопросе в файле file
, это генерирует
Edward
Andrew-James
Удаление только цифр (, как указано в заголовке вопроса ), можно выполнить с помощью tr -d '0-9' <file
, но это приведет к
Edward--singer
Andrew-James--writer
... это не то, что вам нужно.