2016-03-18 2 views
0

Как я могу удалить подстроки, начинающиеся с # и все после #?Удалить строки, начинающиеся с # и все после #

Есть много из них на разных линиях; все они начинаются с # и находятся в конце строки, а число в конце всегда отличается. Все они длиной 15 символов; Я хочу удалить все из # через конец строки с помощью sed или awk.

http://www.somesite/play/episodes/xyz/fred-episode-110#group=p02q32xl 
http://www.somesite/play/episodes/abc/simon-episode-266#group=p03d924k 
http://www.somesite/play/episodes/qwe/mum-episode-39#group=p03l1jpr 
http://www.somesite/play/episodes/zxc/dad-episode-41#group=p03l1j9s 
http://www.somesite/play/episodes/asd/bob-episode-57#group=p03l1j7g 
+0

СЕПГ -e 's /#.$//' inFile.txt –

ответ

3
  • С cut – объявить # как разделитель полей и печатать только первое поле:

    cut -d '#' -f 1 infile 
    
  • С СЭД – заменить все от # на с пустой строкой:

    sed 's/#.*//' infile 
    
  • С AWK – объявить # в качестве разделителя полей и напечатать первое поле:

    awk -F'#' '{ print $1 }' infile 
    
  • С Bash, пользуясь тем, что это всегда последние 15 символов:

    while IFS= read -r line; do 
        echo "${line:0:-15}" 
    done < infile 
    

    Обратите внимание, что это является a) очень медленным и b) требует Bash 4.2-альфа или новее, чтобы поддерживать отрицательное значение длины в расширении параметра.

  • С Perl – расщепления по #, занимая первое поле списка и печать с say включить строку:

    perl -nE 'say ((split /#/)[0])' infile 
    

    или, более кратко и СЭД-иш (указал мой mklement0) :

    perl -pe 's/#.*//' infile 
    
+0

** СЕПГ 's /#.*$//' входной_файл ** будет соответствовать с # (включительно) до последнего символа на такой же линия. –

+1

@ArifBurhan Да, я думаю, что так оно и должно быть: удалите последние 15 символов, которые включают '#'. –

+0

Благодарю всех вас за помощь. Я использовал один из путей Бенджамина sed /#.*// 'infile и добавил -i, как сказал Ариф Бурхан, sed -i /#.*//' infile и он работал – bob

1

В дополнение Benjamin W.'s helpful answer:

grep другой вариант:

  • Если вы НЕ хотите включить #:

    grep -Eo '^[^#]+' file 
    
  • Если вы хотите включить #:

    grep -Eo '^[^#]+.' file 
    
Смежные вопросы