grep — удаление текста после маркера разделителя

По крайней мере, в системах я использовал:

  • more выходы автоматически, когда Вы достигаете конца файла
  • less требует, чтобы Вы вышли явно.
12
23.08.2010, 20:42
4 ответа

sed является, вероятно, самым легким и быстрее, чем awk или жемчуг при этом обстоятельстве:

sed 's/^\([^;][^;]*\);.*$/\1/' some_file_name
5
27.01.2020, 19:55
  • 1
    Это более сложно, чем это должно быть! sed 's/;.*//' –  Gilles 'SO- stop being evil' 23.08.2010, 23:43
  • 2
    я прошу отличаться.-pe's жемчуга/;.*//' some_file_name так же легко, и возможно до 1 500% быстрее при работе в больших файлах. –  codehead 24.08.2010, 06:59
  • 3
    у меня есть несколько систем, где sed доступен, но жемчуг не, таким образом, я поощряю использовать решения более легкого веса, где они достаточны. –  dubiousjim 20.04.2012, 00:06

другая опция состоит в том, чтобы использовать cut команда

cat a.file | cut -d';' -f1
7
27.01.2020, 19:55

Я обычно использую awk для вещей как это:

cat a.file | awk -F=";" '{ print $1 }'

Это будет проводить каждую строку файла и печатать первую группу перед разделителем -F

3
27.01.2020, 19:55
  • 1
    бесполезное использование cat. –  Paused until further notice. 24.08.2010, 04:18
  • 2
    Второй Dennis там. И в соответствии с Linux и BSD это-F = ";" не работает, как предназначено. И Вы могли бы хотеть заключить тот 1$ в кавычки, также: awk-F""; '{печатают 1$}' a.file –  codehead 24.08.2010, 07:05

Вот способ сделать это с помощью GNU grep:

grep -Po "^[^;]+(?=;?)" filename
2
27.01.2020, 19:55
  • 1
    Без Гну grep: grep -Eo '^[^;]+;' filename почти получает его, это просто печатает один символ слишком многие. grep -Eo '^[^;]+' filename почти получает его также, но это также распечатает полные (непустые) строки, которые не имеют никого ;. –  dubiousjim 20.04.2012, 00:12

Теги

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