2014-10-15 4 views
1
# trim the beginning "t" 
echo "test"|sed "s/^t//g" 
est 

# trim the ending "t" 
echo "test"|sed "s/t$//g" 
tes 

# trim both the beginning and ending "t" 
echo "test"|sed "s/(^t)|(t$)//g" 
test 

Почему третья ошибка? Как я могу заставить его работать?обрезание букв в начале и в конце строки

+0

Если он был в переменной, вы также можете использовать bash 'echo '$ {VAR: 1: $ {# VAR} -2}" ' –

ответ

4

Вы должны использовать расширенные регулярные выражения для этого: -r

$ echo "test"|sed -r "s/(^t)|(t$)//g" 
es 

От man sed:

-r, --regexp-расширенная

использование расширенных регулярных выражений в скрипт.

Или вы можете также избежать всех регулярных выражений условий, таких как Etan Reisner suggests:

$ echo test | sed 's/\(^t\)\|\(t$\)//g' 
es 

Примечание Вы можете также использовать -e, чтобы указать несколько команд:

$ echo "test"|sed -e "s/^t//" -e "s/t$//" 
es 
+1

' echo test | sed 's/\ (^ t \) \ | \ (t $ \) // g'' также работает, по крайней мере, с GNU sed. –

+0

Довольно верно, @EtanReisner, я пробовал это, но я просто избегал '|', поэтому он не работал. Большое спасибо, я обновил сообщение с вашим предложением! – fedorqui

1

Вы можете просто использовать это,

$ echo test | sed 's/^t\|t$//g' 
es 
Смежные вопросы