Пожалуйста, я хотел бы извлечь строку перед '.fr'. Вот несколько строк моего файла:

g-82.text.text1.fr.worker1
g-xx.yyyyyy.zzzz.fr.worker2

Я хотел бы извлечь этот текст:

g-82.text.text1
g-xx.yyyyyy.zzzz

Пожалуйста, какую команду я должен использовать в моей оболочке скрипта? Я работаю над дистрибутивом Ubuntu Trusty Tahr 14.04.1 LTS.

Спасибо много.

С уважением.

3 ответа3

1

Используйте команду sed .

sed 's/.fr.*//' file_name.txt

Объяснение: sed удалит часть строки, соответствующую регулярному выражению .fr.* Из каждой строки в файле, оставляя содержимое до .fr .

.fr.* означает .fr. с чем угодно

1

Вы можете использовать регулярное выражение с положительным прогнозом:

echo "g-82.text.text1.fr.worker1" | grep -Po '.*(?=.fr)'
echo "g-xx.yyyyyy.zzzz.fr.worker2" | grep -Po '.*(?=.fr)'

Документация здесь: http://www.rexegg.com/regex-lookarounds.html

1

Пытаться
cut -d'.' -f-3 <file_name.txt

-d определяет "разделитель полей",
Поместите его в кавычки, чтобы он был "безопасен от bash" (некоторые символы имеют особое значение в bash, это способ избежать неприятностей)
Эффект здесь -> разделить на . символы.

-f определяет, какие "поля" оставить, => -3 => Эффект здесь: все с начала до третьего включительно.

man cut - для большего количества вариантов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .