Можно ли переместить строку, начинающуюся с #после другой строки, на предыдущую строку?

Да, в tcsh это возможно (в отличие от оболочек в стиле Bourne -, где вместо этого вам нужно использовать функцию ). Вам нужно поместить !*в текст псевдонима, чтобы заменить параметры, переданные псевдониму, и после этого может быть еще что-то.

alias emacs 'emacs \!* &'

Полезнее использовать встроенный сервер. Начиная с Emacs 22 (IIRC ), вы можете легко запустить emacsclientи запустить Emacs, если он еще не запущен. (В более ранних версияхemacsclientсуществует, но менее полезен.)

alias e 'emacsclient -a "" \!* &'

А если Emacs работает, и вы просто хотите открыть новое окно, тогда нет необходимости запускать emacsclient в фоновом режиме :скажите ему открыть файл в существующем экземпляре Emacs и выйти.

alias e 'emacsclient -a "" -c \!*'
0
10.11.2021, 10:49
2 ответа

С помощью sedможно использовать обратные ссылки на совпадающие шаблоны:

sed 's/\(PATTERN1\)\(PATTERN2\)/\2\n\1/'

Поменяет местами два шаблона и добавит новую строку между ними. ШАБЛОН1 будет, например. ^.*т. е. любые символы с начала строки, ШАБЛОН2 #.*$т. е. символ решетки, за которым следует любое количество символов до конца строки.

Для удаления лишних пробелов можно добавить это:

's/ *$//'

Лучше также позаботиться о комментариях с #в их собственном тексте, исключив символ в совпадении для первой части через [^#], то есть любые символы, которые НЕ #. В совокупности это составляет:

sed 's/\(^[^#]*\)\(#.*$\)/\2\n\1/;s/ *$//'
3
10.11.2021, 11:32

Использование GNU awk для третьего аргумента для match()и \S/\sсокращения:

$ awk 'match($0,/([^#]*\S)\s*(#.*)/,a) { $0=a[2] ORS a[1] } 1' file
#description of command....
auditctl -a always,exit -F arch=b64 -S openat -F auid=1000
#long description
auditctl -a....

или с любым POSIX awk:

$ awk 'match($0,/[[:space:]]*#/) { $0=substr($0,RSTART+RLENGTH-1) ORS substr($0,1,RSTART-1) } 1' file
#description of # command....
auditctl -a always,exit -F arch=b64 -S openat -F auid=1000
#long description
auditctl -a....

Обратите внимание, что описанное выше будет работать независимо от того, какие символы содержит комментарий, включая #, и есть ли пробелы перед комментарием или нет, и он удалит все пробелы, предшествующие -, в конце комментария. остаток строки перед печатью.

4
10.11.2021, 12:05

Теги

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