Если ваш sed
поддерживает опцию -E
(-r
в некоторых реализациях):
sed -Ee :1 -e 's/^(([^",]|"[^"]*")*),/\1|/;t1' < file
:label
s/pattern/replacement/
t label
Очень распространенная sed
идиома. Он продолжает делать одну и ту же замену в цикле, пока она успешна.
Здесь мы заменяем начальную часть строки, состоящую из 0 или более строк или символов в кавычках, отличных от "
и ,
(, захваченных в \1
), за которыми следует ,
с этим захватом \1
и |
, так что на вашем образце это означает:
John,Tonny,"345.3435,23",56th Street
->John|Tonny,"345.3435,23",56th Street
John|Tonny,"345.3435,23",56th Street
->John|Tonny|"345.3435,23",56th Street
John|Tonny|"345.3435,23",56th Street
->John|Tonny|"345.3435,23"|56th Street
С помощью perl
вы можете сделать это с помощью одной замены флага g
на:
perl -pe 's{("[^"]*"|[^",]+)|,}{$1 // "|"}ge'
Здесь, предполагая, что кавычки сбалансированы во входных данных, шаблон будет соответствовать всем входным данным, разбивая их на:
,
или"
И только когда совпадающая строка представляет собой запятую (, если $1
не определено в замещающей части ), замените ее на |
.
В Ubuntu, начиная с версии 11.10, по умолчанию устанавливается заставка Gnome со следующими доступными параметрами:
$ gsettings list-recursively | grep screensaver
org.gnome.desktop.screensaver picture-opacity 100
org.gnome.desktop.screensaver logout-enabled false
org.gnome.desktop.screensaver lock-enabled false
org.gnome.desktop.screensaver logout-delay uint32 7200
org.gnome.desktop.screensaver embedded-keyboard-enabled false
org.gnome.desktop.screensaver primary-color '#023c88'
org.gnome.desktop.screensaver idle-activation-enabled true
org.gnome.desktop.screensaver secondary-color '#5789ca'
org.gnome.desktop.screensaver logout-command ''
org.gnome.desktop.screensaver color-shading-type 'solid'
org.gnome.desktop.screensaver embedded-keyboard-command ''
org.gnome.desktop.screensaver show-notifications false
org.gnome.desktop.screensaver picture-options 'zoom'
org.gnome.desktop.screensaver lock-delay uint32 0
org.gnome.desktop.screensaver show-full-name-in-top-bar true
org.gnome.desktop.screensaver picture-uri 'file:///usr/share/backgrounds/warty-final-ubuntu.png'
org.gnome.desktop.screensaver status-message-enabled true
org.gnome.desktop.screensaver ubuntu-lock-on-suspend true
Единственный способ исправить это — установить другую заставку. Я лично не рекомендовал бы вам делать это. Вы даже можете запрограммировать свой собственный.Если вы просто хотите черный экран, это легко. Чтобы также убедиться, что экран переходит в спящий режим, это немного сложнее, но вы можете найти существующий открытый исходный код, чтобы сделать это.
Кстати, вы пытаетесь удалить то, что в Gnome называется анимацией. К сожалению, в какой-то момент стало почти невозможно не получить все эти анимации (, например, когда я переключаюсь между экранами, они прокручиваются, я бы хотел сразу перейти туда...)