"Выразительная часть" ресурса аккумулятора легче, я использовал бы byobu или подобную утилиту для этого. Эти менеджеры являются великими в этом, они разделят сессии от терминалов, что означает, что можно даже запустить работу в DE в byobu, затем просто убить DE и продолжить в tty.
Или можно реализовать это в оболочке (взгляды $PS1
и функция удара).
Для мчащейся части, для закрытия средств DE закрыть все программы, работающие в этом, которое может означать потерю данных. Это может рассматриваться как причина, почему Вы должны базироваться доступ.
Однако, если Вы действительно хотите это и хотите смочь сделать это быстро в любое время, можно записать сценарий для этого, "дать" его, чтобы базироваться и установить бит setuid так, чтобы, если кто-либо запускает этот конкретный скрипт, он работал как корень без дальнейшей аутентификации. Что делает, это немного более сложное - то, что некоторые дистрибутивы не позволят Вам сделать это со сценариями. Это может быть решено путем создания обертки C, которая будет exec
сценарий для Вас и использования та обертка вместо этого.
Я, вероятно, пошел бы с этим подходом плюс, рассматривают дополнительные функции как не уничтожение, если работал из DE, ничего не убив сразу (как период 60-х) или отображение его к ключу в Byobu.
Если нет никаких шансов, что какой-либо из символов <> |
может встретиться в данных, которые вы хотите сохранить в своем файле, то почти наверняка наиболее эффективным решением будет просто tr
и полностью удалите их:
tr '<>|' ' ' <infile | ###translate all delimiter chars to spaces
tr -s ' ' >outfile ###pipe results to second tr and squeeze spaces
sed
может работать и для вас, но если это так, то почти наверняка это будет медленнее. Вы должны быть осторожны при работе с входными файлами, не основанными на \ n
разделителях ewline, и с использованием инструментов, предназначенных для обработки данных с разделителями \ n
ewline, разделенных (например, sed
и grep
) , потому что некоторые реализации могут потерпеть неудачу при нагрузке на буфер.
Ваша проблема не в (пока) , хотя: скорее вы отправили неверный синтаксис в виде команды sed
. @Archemar уже прокомментировал, что это такое, но вот почему:
A sed
s ///
ubstitution - это команда, состоящая из трех полей:
s
командный примитив, за которым следует разделитель (обычно /
) Один или оба последних могут иметь нулевую длину по разным причинам - и поэтому s ///
является (зависит от контекста) приемлемым синтаксисом. Это означает, что синтаксический анализатор sed
должен очень сильно зависеть от разделителя.В вашей команде вы указываете слишком много полей - это синтаксическая ошибка, и поэтому ваша функция не может быть проанализирована .
Если ваша реализация sed
может обрабатывать однострочный ввод и совместима с POSIX, тогда это должно работать вместо этого:
sed 'y/<>|/ /;s/ */ /g' <infile >outfile
... где примитив y
выше - Собственная tr
функция анслитерации sed
.
Попробуйте так:
sed -e 's:<>\s\|.*:Replaced:g' filename
Результат выглядит следующим образом:
$ echo "<> |" | sed -e 's:<>\s\|.*:Replaced:g'
Replaced
Если вы просто хотите удалить его, удалите слово Заменено
из команды.
Если между символами <
и >
имеется пробел, следует заменить <>
на <\s>
.
После обновления вопроса:
$ cat filename
> Test Item|Test Item
< Test Item|Test Item
$ cat filename | sed -E 's:[<>]\s(.*)\|(.*)$:\1 \2:g'
Test Item Test Item
Test Item Test Item