Справка о команде sed

Учебник Linux, посвященный команде sed, дает мне следующий пример:

sed -e 's/\(<[^ ]*>\)\([ ]*\)\(<[^ ]*>\)/\3\2\1/g'
GNU Linux is cool
Linux GNU cool is 

, но пока я набираю точно ту же команду, что и один, он показывает мне:

sed -e 's/\(<[^ ]*>\)\([ ]*\)\(<[^ ]*>\)/\3\2\1/g'
GNU Linux is cool
GNU Linux is cool

Кто-нибудь может помочь мне решить это? Я использую Ubuntu 12.04LTS. Большое спасибо.

1
задан 15 March 2014 в 16:06

1 ответ

Ну, я не знаю. Здесь было несколько проблем:

Для этих совпадений требуется расширенный режим (-r). Режим сценария не нужен (-e), но это не было ошибкой. Был много экранов, которые были синтаксически неправильны (вам нужны те, которые соответствуют) Я не мог понять, что угловые скобки были вообще. Поэтому я их убил. Глобальный режим /g разбивает его, потому что он меняет последние три слова и разбивает пространство. Попробуйте, если хотите.

И здесь он работает:

$ echo "GNU Linux is cool" | sed -r "s/([^ ]*)([ ]*)([^ ]*)/\3\2\1/"
Linux GNU is cool

. Лучше / короче / проще читать способ сделать это было бы уничтожить вторую группу и просто использовать буквальное пространство , Например:

$ echo "GNU Linux is cool" | sed -r "s/([^ ]*) ([^ ]*)/\2 \1/"
Linux GNU is cool
1
ответ дан 24 May 2018 в 10:46

Другие вопросы по тегам:

Похожие вопросы: