2015-05-13 5 views
0

Кто-нибудь знает, как удалить шаблон «@TechCrunch:» в следующей строке sed в Linux?Соответствие шаблону в Bash Linux

str="0,RT @TechCrunch: The Tyranny Of Government And Our Duty Of Confidentiality As Bloggers." 

Таким образом, желаемый результат будет:

"0,RT The Tyranny Of Government And Our Duty Of Confidentiality As Bloggers." 

Я перепробовал много способов, но никто не работает, например:

echo $str | sed 's/@[a-zA-Z]*\ //' 
+2

Получите ваш рисунок правильно, и эта команда работает. Вы пропустили ':' после 'Crunch'. –

+0

Также вам не нужно скрывать пространство в шаблоне. –

+1

Если вы просто хотите удалить все до и включая первый ':', вам не нужен sed для этого. 'str = $ {str # *:}' –

ответ

1

Вы были близки - просто отсутствует :.

perl -pe 's/@\w*:\s//i' 

Или в sed:

sed -e 's/@[a-z]: //i' 
+0

'\ s' является синтаксисом PCRE, нет? Требуется ли поддержка POSIX для его поддержки? –

+0

Это так, и он работал над системой Linux, в которой я ее пробовал. – Sobrique

+0

«Работает на одной системе, в которой я тестировал ее», вряд ли можно быть уверенным, что что-то будет работать для кого угодно, кроме вас. Множество различных дистрибутивов Linux с множеством различных наборов инструментов (в том числе крошечных, таких как Busybox). –

0

: не сопровождается [a-zA-Z]. Кроме того, нет необходимости обратного сбрасывания пространства.

sed 's/@[a-zA-Z]*: //' 
+0

Спасибо за помощь! – user1460691

2

Использование sed (или любого другого внешнего инструмента) для одной линии, который уже в переменной оболочки является безобразно неэффективно. Намного легче иметь оболочку сама замена.

#!/bin/bash 
#  ^- must be /bin/bash, not /bin/sh, for extglobs to be available 

shopt -s extglob # put this somewhere early in your script to enable extended globs 

str="0,RT @TechCrunch: The Tyranny Of Government And Our Duty Of Confidentiality As Bloggers." 
echo "${str//@+([[:alpha:]]): /}" 

При этом используется синтаксис extglob, чтобы обеспечить более мощный шаблон совпадает со встроенной оболочки сопоставления с образцом; +(foo) является extglob эквивалентом формы регулярного выражения (foo)+.

Смежные вопросы