LINUX.ORG.RU

Помогите по sed'у

 ,


0

1

Всем доброго дня Подскажите, вот изучаю сед хочу научится переставлять слова разделенные пробелами но что то ничего не получается Допустим слово может быть любым набором символом, все кроме пробелов

Итого соорудил вот такую конструкцию

echo 'abcd qwer zxc 123' | sed -E "s/([^[[:space:]]]+)([^[[:space:]]]+)([^[[:space:]]]+)/\2 \1 \3/"

Вроде все по гуглу и мануалам но не работает, вывод даёт теже

abcd qwer zxc 123

Что не так то?



Последнее исправление: xaizek (всего исправлений: 1)

В данном случае awk позволит без лишних усилий переставить столбцы, разделенные пробелом.

Nedderokumo
()

man 7 regex:

Within a bracket expression, the name of a character class enclosed in "[:" and ":]" stands for the list of all characters belonging to that class.

\2 \1 \3

Здесь тоже ошибка.

xaizek ★★★★★
()
echo 'abcd qwer zxc 123' | sed -E 's/(\S+\s)(\S+\s)(\S+\s.+)/\2\1\3/
anonymous
()
Ответ на: комментарий от Nedderokumo

Лол - вот оно решение [^ ] просто как пять копеек, и нигде ж блин ни слова об этом, везде говорится за классы символов, [[:space:]] блин

barmaley99
() автор топика
([^[[:space:]]]+)([^[[:space:]]]+)([^[[:space:]]]+)

Ты матчишь всё кроме пробелов в тексте без пробелов. А ещё у тебя лишние брэкеты:

([^[:space:]]+)[[:space:]]+([^[:space:]]+)[[:space:]]+([^[:space:]]+)

Попробуй так.

А вообще, поддерживаю первого отписавшегося.

mord0d ★★★★★
()
int@sophi ~ $ echo 'abcd qwer zxc 123' | sed -r 's|([a-z0-9]+) ([a-z0-9]+) ([a-z0-9]+)|\2 \1 \3|'
qwer abcd zxc 123
int@sophi ~ $
ubik
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.