Получить содержимое перед двоеточием

Другое короткое awk решение:

awk -F, '$3~"SAMS CLUB"{sub("S ","\047S ",$3)}1' OFS=',' filename1 > filename2
8
28.08.2019, 21:23
6 ответов

Это то, что cutдля:

$ cat file
help.helloworld.com:latest.world.com
dev.helloworld.com:latest.world.com
foo:baz:bar
foo

$ cut -d: -f1 file
help.helloworld.com
dev.helloworld.com
foo
foo

Вы просто устанавливаете разделитель на :с помощью -d:и говорите ему печатать только 1-е поле(-f1).

37
27.01.2020, 20:08

Requires GNU grep. It would not work with the default grep on e.g. macOS or any of the other BSDs.

Вы имеете в виду вот так:

grep -oP '.*(?=:)' file

Выход:

help.helloworld.com
dev.helloworld.com
4
27.01.2020, 20:08

Или альтернатива:

$ grep -o '^[^:]*' file
help.helloworld.com
dev.helloworld.com

Это возвращает любые символы, начинающиеся в начале каждой строки (^), которые не являются двоеточиями ([^:]*).

19
27.01.2020, 20:08

Однозначно рекомендуюawk:

awk -F ':' '{print $1}' file

Использует :как разделитель полей и печатает первое поле.

18
27.01.2020, 20:08

обновленный ответ

Рассматривая следующий файлfile.txt:

help.helloworld.com:latest.world.com
dev.helloworld.com:latest.world.com
no.colon.com
colon.at.the.end.com:

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

sed -e 's/:.*//' file.txt

Это работает для всех крайних случаев, указанных в комментариях — если это заканчивается двоеточием или если двоеточия нет, хотя это не упоминалось в самом вопросе. Спасибо @Rakesh Sharma, @mirabilos и @Freddy за их комментарии. Отвечать на вопросы — отличный способ учиться.

5
27.01.2020, 20:08

Этого можно добиться с помощью обработки строк bash, удаляя самое длинное совпадение из строки непосредственно для каждой строки, читаемой следующим образом:

for line in $(cat inputfile); do echo "${line%%:*}"; done

Это может быть полезной альтернативой, если вы анализируете файл в сценарии оболочки (, хотя я подозреваю, что использование cut может быть более эффективным ).

-2
27.01.2020, 20:08

Теги

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