LINUX.ORG.RU

Так чётные строки или чётные слова в строке? Задание внимательнее переписывай.

выше тебе про слова показали, вот тебе про строки

и tr

он тут конечно лишний, но задание есть задание

sed -n '1~2!p' file |tr 'slovo' 'zamena'

bass ★★★★★
()
Последнее исправление: bass (всего исправлений: 1)
Ответ на: комментарий от bass

Четные слова, со строками легко)

Ggox
() автор топика
Ответ на: комментарий от Ggox

А не могли бы объяснить как это работает?

Ищем пары слов, первое с разделителем оставляем как есть, а второе заменяем.

s/что искать/на что заменить/флаги

«что искать» - regexp поиска
«на что заменить» - строка замены
«флаги» - модификаторы, например «g» означает искать не до первого совпадения, а сколько угодно совпадений (и столько же замен делать).

\w - любой символ, который может быть в слове (буквы, цифры, «_», ...);
\w+ - последовательность из 1 и более таких символов, т.е. это шаблон нашего «слова»;
\W - любой разделитель (символ, не входящий в понятие «слово»), если разделителем должен быть пробельный символ, нужно заменить \W на \s;
\W+ - 1 и более разделителей

\w+\W+\w+ - это словоРАЗДЕЛИТЕЛИслово
нам нужно заменить второе, значит всё, что кроме второго, выделяем скобками - (\w+\W+)\w+
в строке замены указываем как менять - \1замена
\1 - это то, что выделили в шаблоне первыми скобками, «замена» - слово-заменитель, т.е.
словоРАЗДЕЛИТЕЛИслово -> словоРАЗДЕЛИТЕЛИзамена

И так для каждой пары. sed, когда ищет и делает замены, продолжает поиск с места строки, на котором остановился, а не каждый раз сначала. Следовательно все слова будут обработаны попарно.

spirit ★★★★★
()
Ответ на: комментарий от Ggox

а если я хочу слова на четной позиции перевести в верхний регистр это как?

echo 'word1 word2 word3 word4 word5 word6 word7 word8 word9' | awk '{ for (i=2; i<=NF; i+=2){ $i=toupper($i); }; print; }'

word1 WORD2 word3 WORD4 word5 WORD6 word7 WORD8 word9

spirit ★★★★★
()
Ответ на: комментарий от Ggox

Или такой вариант (только для GNU sed):

echo 'word1    word2 word3 word4 word5 word6 word7 word8 word9' | sed -r 's/(\w+\W+)(\w+)/\1\U\2/g'

word1    WORD2 word3 WORD4 word5 WORD6 word7 WORD8 word9

В отличие от предыдущего примера с awk тут сохраняется оригинальное количество разделителей.

spirit ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.