Какая модель сервера? А при замене материнской платы вы пытаетесь загрузиться с того же диска? А другие настройки OBP проверены?
Вы исключаете модули / драйверы из / etc / system? Я помню, что драйвер USB (ohci?) Был исключен на старом рабочем столе Solaris 8, из-за чего Xserver не запускался.
Поскольку вы можете войти через rlogin или telnet, что показывает ps -aef | grep X
?
sed -E 's/\b([0-9]+\b\s*\b[0-9]+)\b\s*([^\s]+)/\1 "\2"/g' myfile
Это только добавляет двойные кавычки вокруг вашего текста.
Сохраняя цифры и пробелы в группе \ 1
и строку в другой группе (\ 2), sed выводит группу 1 (\ 1), за которой следует пробел, за которым следует двойная кавычка, за которой следует вторая группа (\ 2), за которой следует последняя двойная кавычка.
Вы можете немного сократить это, сгруппировав все цифры и пробелы в одну группу ([0-9,] *)
и все после цифр в другой группе (. +)
.
Это дает:
sed -E 's/([0-9, ]*)(.+)/\1 "\2"/g' myfile
12 42956 "Cinema - 3D/Multiplex"
7 12560 "Status Update"
5 184 "Movie"
Насколько мне известно, \ s
- это Perl регулярное выражение, аналогичное [[: blank:]]
в sed
. Внутри [...]
, \ s
означает « \
и s
». Также обратите внимание, что даже если [^ \ s] +
было бы таким же, как [^ ␣] +
, это не соответствовало бы обновлению статуса
из-за в пространство посередине.
Замена заменит все совпадения первой группой в двойных кавычках. Вы, вероятно, захотите поймать все три столбца, иначе вы получите только последний столбец. И поскольку вы пытаетесь сопоставить всю строку, вы должны привязать выражение в начале и конце с помощью ^
и $
и сбросить флаг g
в конце.
Альтернатива:
$ sed -E 's/[[:alpha:]].+/"&"/' myfile
12 42956 "Cinema - 3D/Multiplex "
7 12560 "Status Update "
5 184 "Movie "
Последний столбец будет найден по тому факту, что его данные всегда начинаются с нецифровой цифры. Выражение будет просто соответствовать оставшейся части строки от первого буквенного символа и заменяет все совпадения версией совпадения в двойных кавычках.
Данные в вопросе имеют пробелы в конце, и кавычки будут включать их. Чтобы избежать пробелов в конце:
$ sed -E -e 's/[[:blank:]]*$//' -e 's/[[:alpha:]].+/"&"/' myfile
12 42956 "Cinema - 3D/Multiplex"
7 12560 "Status Update"
5 184 "Movie"
В качестве альтернативы,
while read -r a b c; do printf '%d\t%d\t"%s"\n' "$a" "$b" "$c"; done <myfile
12 42956 "Cinema - 3D/Multiplex"
7 12560 "Status Update"
5 184 "Movie"
Поскольку Mac OSX sed
не поддерживает \s
. Только GNU sed
поддерживает \s
.
В Mac OSX \s
не работает, даже с цитированием $''
ANSI -C.
$ echo $'1\t2 3' | sed 's/\s//g'
1 2 3
$ echo $'1\t2 3' | sed $'s/\s//g'
1 2 3
Вместо этого вы можете использовать[[:space:]]
$ echo $'1\t2 3' | sed 's/[[:space:]]//g'
123
Или вы можете использовать [ \t]
, но вам понадобятся кавычки $''
ANSI -C для символа табуляции.
$ echo $'1\t2 3' | sed $'s/[ \t]//g'
123