Решением было использовать dracut с соответствующими сетевыми флагами. В учебнике RHEL6 эти флаги не включены, когда речь идет о корне nfs, поэтому я не знал о них. Вкратце о ключевых шагах, сделанных для выполнения установки root nfs с помощью RHEL6, следует:
#Install dracut-network on RHEL6 (The Host Machine)
yum install dracut-network –y
#Do a remote root install to the export directory where to nfs root will live.
yum groupinstall Base --installroot=/export/home/spice/root –y
#Use darcut with nfs flags to
dracut -d nfs -d network -f
#Also had to turn off kdump to avoid errors.
chroot /export/home/spice/root chkconfig kdump off
Спасибо, ребята.
sed
— это потоковый редактор, то есть он читает текст, редактирует его и выводит результат. Не обязательно работать с файлами, только с потоками текста. (В вашем случае поток текста поступает из файла, так что практической разницы нет.)
Используя sed
, у вас есть несколько вариантов
В любом случае вам нужно убедиться, что перед тремя стоит пробел, а после них ничего нет.
Будет найдено совпадение слов из четырех (или более )символов и удалена совпадающая строка. Обратите внимание, что мы не связываем концы последовательности, поэтому они будут удачно совпадать в середине более длинной последовательности
sed '/[[:lower:]][[:lower:]][[:lower:]][[:lower:]]/d' animals
Это будет работать с файлом как указано, но не принимает во внимание возможность того, что могут быть животные двух (или даже только одной )буквы. (Подумайте, например, о быке ). Так что нам нужно их выбить. На этом этапе нам нужно сообщить sed
, что к каждой строке по очереди нужно применить несколько операций. Нам также необходимо ввести новый символ $
, указывающий, что регулярное выражение должно быть привязано к концу -строки -:
Это можно записать в длинной форме следующим образом:
sed -e '/[[:lower:]][[:lower:]][[:lower:]][[:lower:]]/d' -e '/ [[:lower:]][[:lower:]]$/d' -e '/ [[:lower:]]$/d' animals
Если у вас есть подходящая версия sed
, вы можете свернуть ее в более удобочитаемую форму. (Найдите флаг -r
.)
Я использую sed (GNU sed) 4.2.2
и получил желаемый результат:
sed 's/^[[:digit:]]\{2\}[[:punct:]][[:space:]]\([[:lower:]]\{3\}\)/\1/gm' animals.txt | sed '/[[:lower:]]\{4\}/d'
Он выполняет следующие шаги:
На выходе есть только слова, содержащие ровно 3 символа нижнего регистра:
cow
dog
fox
pig
rat
yak
Для справки, GNU sed использует этот синтаксис регулярного выражения .
Самый простой способ сделать это примерно так:
$ sed -n '/^....[a-z]\{3\}$/p' animals
03. cow
04. dog
06. fox
16. pig
18. rat
25. yak
Чтобы выполнить требование, которое вы используете [[:lower:]]
, вы можете изменить вышеприведенное следующим образом:
$ sed -n '/^....[[:lower:]]\{3\}$/p' animals
03. cow
04. dog
06. fox
16. pig
18. rat
25. yak
Вы также можете отключить ....
для последовательности с явно заданным размером:
$ sed -n '/^.\{4\}[[:lower:]]\{3\}$/p' animals
03. cow
04. dog
06. fox
16. pig
18. rat
25. yak
Вы были близки. Основная идея сопоставления 3 элементов находится в правильном направлении.
Синтаксическая ошибка для BRE заключается в том, что для {}
требуется обратная косая черта (или используется-E
).
Тем не менее, ваше регулярное выражение:[[:lower:]]\{3\}
будет соответствовать любому, содержащему три или более символов.
Вам нужно привязать регулярное выражение, возможно, отspace
()к
end
($
):
$ <infile sed -n '/ [[:lower:]]\{3\}$/p'
Обратите внимание, что команда не будет распечатываться по умолчанию и p
будет напечатана только в совпадающих строках. Это можно было бы написать наоборот:
$ <infile sed '/ [[:lower:]]\{3\}$/!d'
То есть :печатать по умолчанию, в строках не совпадающих , удалить их(d
).
Или вы можете использовать границы слов:
$ <infile sed '/\b[[:lower:]]\{3\}\b/!d'
Или:
$ <infile sed '/\<[[:lower:]]\{3\}\>/!d'
И, возможно, использовать регулярное выражение ERE:
$ <infile sed -E '/\b[[:lower:]]{3}\b/!d'
Если вам нужны только названия животных, используйте:
$ <infile sed -E '/.*\<([[:lower:]]{3})\>/!d;s//\1/'
cow
dog
fox
pig
rat
yak