то, что сработало для меня, - это решение, описанное в ссылке, опубликованной Mário:
http://www.liberiangeek.net/2013/04/how-to-restart-unity-and-compiz -in-ubuntu-13-04-raring-ringtail /
Шаги:
sudo apt-get install dconf-tools
dconf reset -f /org/compiz/
unity --reset-icons
и снова войти в систему
Вы можете использовать это:
sed -n '/\[Z\]$/ s/^/<font>/;/\[Z\]$/ s/$/<\/font>/p' file.txt
Поскольку вы будете использовать его поверх STDOUT другой команды, используйте его как, например. :
some command | sed -n '/\[Z\]$/ s/^/<font>/;/\[Z\]$/ s/$/<\/font>/p'
В основном он состоит из двух частей:
/\[Z\]$/ s/^/<font>/ будет соответствовать линии, которая наконец имеет [Z], а затем добавит <font> в начале строка s/^/<font>/ /\[Z\]$/ s/$/<\/font>/ будет соответствовать [Z] в конце строки, а затем добавит </font> в конце строки, используя /$/<\/font>/.Пример:
$ cat file.txt
service:clus1-svr clus1-node2 started [Z]
service:clus1-svr clus1-node2 started
$ sed -n '/\[Z\]$/ s/^/<font>/;/\[Z\]$/ s/$/<\/font>/p' file.txt
<font>service:clus1-svr clus1-node2 started [Z]</font>
Как отметил @glennjackman, вы также можете использовать конструкцию группировки для выполнения всех замен для одного совпадения:
$ sed -n '/\[Z\]$/ { s/^/<font>/; s/$/<\/font>/p }' file.txt
<font>service:clus1-svr clus1-node2 started [Z]</font>
Как насчет решения bash:
while IFS= read -r line; do [[ $line =~ \[Z\]$ ]] && echo "<font>${line}</font>"; done <file.txt
Вы можете использовать его как:
some command | while IFS= read -r line; do [[ $line =~ \[Z\]$ ]] && echo "<font>${line}</font>"; done
Это использует ту же логику, что и sed один. Если строка заканчивается на [Z] ([[ $line =~ \[Z\]$ ]]), тогда строка печатается в нужном формате.
Пример:
$ while IFS= read -r line; do [[ $line =~ \[Z\]$ ]] && echo "<font>${line}</font>"; done <file.txt
<font>service:clus1-svr clus1-node2 started [Z]</font>
Awk version.
Протестировано с примером OP, вставленным дважды в один и тот же файл, так как вы можете видеть, что он редактирует те две строки, которые имеют [Z], и два, которые не содержат it
$ awk ' {if ($0~/\[Z\]/) print "<font>"$0"</font>";else print}' testfile.txt
<font>service:clus1-svr clus1-node2 started [Z]</font>
service:clus1-svr clus1-node2 started
<font>service:clus1-svr clus1-node2 started [Z]</font>
service:clus1-svr clus1-node2 started
Чтобы вывести изменения в файл, используйте следующую конструкцию:
awk ' {if ($0~/\[Z\]/) print "<font>"$0"</font>";else print}' testfile.txt > /tmp/tmp.txt && cat /tmp/tmp.txt > testfile.txt