удалите пробел перед разделителем с sed

Если Вы действительно хотите чистую, последовательную систему сборки, Вы могли бы быть лучше из со снимками файловой системы такой как, что предлагает LVM. Можно установить систему с файловыми системами как/usr на LVM. Затем можно создать снимок любых файловых систем, которые Вы хотите восстановить к их исходному состоянию через lvsnapshot команда. Можно смонтировать эти снимки как записываемые вместо их нормального монтирования. Когда Вы хотите вернуться к более раннему состоянию, просто umount, удалить, и воссоздать снимки и смонтировать новые снимки снова. Если Вы хотите сохранить / домой или другие файловые системы в их текущем состоянии, можно поместить их на LVM, но не создать снимок для них.

Другой подход, который я использую при тестировании развертываний программного обеспечения или дисков пользовательской установки, должен использовать виртуальную машину как рабочая станция VirtualBox или VMware. Они могут взять целые дисковые снимки восстановить их по запросу. Это также обладает преимуществами как приостановка машины в то время как перезагрузки хоста. После того как виртуальная машина запущена, она возобновляется от состояния, которым это было при приостановке. VirtualBox, в частности, может взять несколько дисковых снимков, любой возвращается к любому прежнему снимку, все еще сохраняя их. Вы могли пойти между двумя или больше строками снимков в случае необходимости.

2
23.10.2012, 00:59
4 ответа

Почему Вы заключили бы его в кавычки? Если Вы хотите ссылки, использовать \( и \) вместо этого,

Кроме того, отметьте g опция, так как тот шаблон появляется многократно

sed -i 's/\s*|/|/g' DataStats0914.txt

Тест:

echo 'data | num | num | num | num' | sed 's/\s*|/|/g'

Добрался:

data| num| num| num| num

5
27.01.2020, 21:53
  • 1
    ручного чтения является причиной. Но откровенно страницы справочника запугивают меня. –  Erik 25.10.2012, 07:17

Существует несколько различных синтаксисов регулярного выражения. (\s*) соответствует последовательности пробела в Perl и многих других современных программах, которые подражают его regexes. Sed использует более старый вариант основных регулярных выражений, в которых круглые скобки обозначают себя и \(…\) используется для группировки. GNU sed (версия на Linux) имеет опцию -r использовать расширенные регулярные выражения (какой Perl regexes расширяется далее), вместо этого. Кроме того, | обозначает себя в BRE, но должен предшествоваться обратной косой чертой в ДО.

s/[ \t]\+|/|/ пробел замен сопровождается a | с GNU sed. Если Вы хотите совместимую POSIX команду sed, использовать s/[ ][ ]*|/|/ где каждая пара скобок содержит пространство и вкладку, как \t и \+ расширения GNU. Кроме того, s управляйте только заменами одно возникновение на строку: добавьте g снабдите суффиксом для замены всех случаев.

sed  -i 's/[ \t]\+|/|/g' DataStats0914.txt
2
27.01.2020, 21:53

sed удаляющие пробелы:

sed -i 's/ *|/|/g' file
0
27.01.2020, 21:53

Pythonish три лайнера, непротестированные:

python -c 'import sys
for l in sys.readlines():
    print("| ").join([f.strip() for f in l.strip().split("|")])'
0
27.01.2020, 21:53

Теги

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