Поскольку AMD был первым, который выпустит 64-разрядный x86 (x86-64) центральные процессоры.
архитектура AMD64 была расположена AMD с начала как эволюционный способ добавить 64-разрядные вычислительные возможности к существующей x86 архитектуре, в противоположность подходу Intel создания совершенно новой 64-разрядной архитектуры с IA-64.
Первый основанный на AMD64 процессор, Opteron, был выпущен в апреле 2003.
На самом деле в ядре 64-разрядную поддержку называют 'x86_64' для обращения к тому, что и AMD и Intel (и другие) реализуют те инструкции.
Вот решение с помощью regex с жемчугом:
$ echo '45mb ./aaaa/bbbb/cccc/dddd' | perl -ne 'print $1 if /(\.\/.*\/)/'
./aaaa/bbbb/cccc/
И замена:
$ echo '45mb ./aaaa/bbbb/cccc/dddd' | perl -ple 's/(\.\/.*\/)/--/'
45mb --dddd
Так как Вы разъяснили то, что Вы хотели в комментарии к ответу Gnouc, вот решение:
sed 's|[^ /]*/|--|g'
$ echo '45mb ./aaaa/bbbb/cccc/dddd' | sed 's|[^ /]*/|--|g'
45mb --------dddd
Это повредится, если у Вас будет запаздывающая наклонная черта, или если filepath, Вы являетесь передающими к нему, содержит какие-либо пробелы. Было бы довольно легко написать сценарий чего-то немного более водонепроницаемого, но это включит больше, чем одна строка.
Вот одно решение с помощью групп получения:
sed -e 's|\([^ ]* \).*/\(.*\)|\1\2|'
Я использую |
s как разделители, потому что затем я не должен потрудиться выходить из наклонных черт вправо (но я должен был бы выйти из любого |
s в шаблоне). AFAIK sed
может иметь в значительной степени любой символ как разделитель.
Первая группа получения \([^ ]* \)
соответствия 'любое количество любого символа кроме пробела, сопровождаемого пробелом'. .*/
соответствия 'любое количество любых символов, сопровождаемых наклонной чертой вправо' и второй группой \(.*\)
получения 'любое количество любых символов'.
Регулярные выражения Sed (и наиболее регулярные выражения) являются жадными по умолчанию, таким образом, .*/
будет соответствовать самой длинной строке, которая соответствует ее шаблону.
$ echo '45mb ./aaaa/bbbb/cccc/dddd' | sed 's|\([^ ]* \).*/\(.*\)|\1\2|'
45mb dddd
Однако это повредится, если будет запаздывающая наклонная черта:
$ echo '45mb ./aaaa/bbbb/cccc/dddd/' | sed 's|\([^ ]* \).*/\(.*\)|\1\2|'
45mb
Эта версия будет работать даже с запаздывающей наклонной чертой, но повредится, если у Вас будет больше чем один:
sed -e 's|\([^ ]* \).*/\(.\)|\1\2|'
$ echo '45mb ./aaaa/bbbb/cccc/dddd/' | sed 's|\([^ ]* \).*/\(.\)|\1\2|'
45mb dddd/
$ echo '45mb ./aaaa/bbbb/cccc/dddd//' | sed 's|\([^ ]* \).*/\(.\)|\1\2|'
45mb /
find ./ -maxdepth 1 -type d -print0 | xargs -0 du -h --max-depth 1 | sed -e 's/[^\/]*\//--/g;'
для печати иерархии dir с глубиной, представленной - для каждой подпапки и в запуске, я хочу размер dir. В данный момент находка и du распечатают то, что я хочу, и sed заменит директоров - но это также обрубает размер dir от запуска, который я хочу оставленный неповрежденный. – Flo Woo 27.07.2013, 04:36perl -ple 's/(?<=\/)[^\/]+\//--/g'
еще раз спасибо – Flo Woo 27.07.2013, 13:47