Я хотел бы использовать команду sed, чтобы избавиться от некоторых черточек в строке (внутри файла), то есть в файле есть строка, которая говорит:

TEXT=abcdef-lalala-someText-yahoo

После выполнения sed эта строка должна выглядеть следующим образом:

TEXT=abcdeflalalasomeTextyahoo

заранее спасибо

3 ответа3

3

Ну вот:

echo "TEXT=abcdef-lalala-someText-yahoo" | sed 's/-//g'
TEXT=abcdeflalalasomeTextyahoo
1

Исходя из вашего дальнейшего комментария к ответу Nifle , возможно, это больше похоже на то, что вы ищете. Он действует только на строки, которые содержат TEXT= за которым следуют 4 '-' сегмента текста с разделителями.

Использование GNU sed (обработка "TEXT" и "Yahoo" как константы)

sed -re 's/^(TEXT=[^-]+)-([^-]+)-([^-]+)-(yahoo)$/\1\2\3\4/'

Или, используя GNU sed (обрабатывая весь текст после "=" как переменный)

sed -re 's/^(TEXT=[^-]+)-([^-]+)-([^-]+)-([^-]+)$/\1\2\3\4/'

Или, для переносимости posix (обрабатывая весь текст после "=" как vairable):

sed 's/^\(TEXT=[^-][^-]*\)-\([^-][^-]*\)-\([^-][^-]*\)-\([^-][^-]*\)$/\1\2\3\4/'
0

Вот это мои два цента ... Вы можете добавить совпадение (TEXT =) перед командой замены ... Именно так:

sed '/TEXT=/s/-//g'

Результаты будут:

echo "TEXT=abcdef-lalala-someText-yahoo" | sed '/TEXT=/s/-//g'
TEXT=abcdeflalalasomeTextyahoo

Команда замены будет выполняться только при совпадении с первым предложением, в этом случае с совпадением «TEXT =». Я думаю, что команда будет проще и элегантнее.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .