Перемещая последние шесть цифр в начало чисел

Большинство системных скриптов в (родственных Debian: Ubuntu, Mint и т.д.) Linux написаны для запуска в более быстром dash, которым по умолчанию в этих системах является /bin/sh. Причина двоякая:

  • Скорость системы. Меньший код dash быстрее загружается и также быстрее запускается. С некоторыми (небольшими?) дополнительными усилиями (затратами) для программистов shell-скриптов.

  • Безопасность. Разнообразие оболочек помогает устойчивости к ошибкам. Системы Debian в основном не были уязвимы к shellshock, потому что оболочка по умолчанию не имела такой уязвимости.

Bash действительно является оболочкой по умолчанию для пользователей, поскольку он более мощный и имеет гораздо больше элементов, облегчающих кодирование. Он также является sh по умолчанию в Mac OS (тот, который связан с /bin/sh). Однако вызов bash с именем ссылки sh заставляет его запускаться как posix-совместимый shell.

2
08.10.2018, 14:58
4 ответа

Сsed:

sed 's/\(.*\)\(.\{6\}\)/\2\1/'
7
27.01.2020, 21:49
cat file | sed -e 's/\(.\)/\1 /g' | awk '{ for (i = 1; i <= NF; i++) printf "%s" FS, $((NF-7+i) % NF+1); print ""}' | sed 's/ //g'
09098676356378
98008908976357627
809209089723571237
8387980897253712730912
909887908916523568
467890876756
46789009876535
324343765643
876543467890
987654234567890
876543123456789009
78987654323456
34567809876543
009876123456789
99876512345678
1
27.01.2020, 21:49

С сед:

sed -E 's/(.*)(.{6})/\2\1/'

или:

sed 's/\(.*\)\(.\{6\}\)/\2\1/'

С awk:

awk '{l=length-6;print(substr($0,l+1) substr($0,1,l))}'

С (GNU )awk:

awk '{print gensub(/(.*)(.{6})/,"\\2\\1",1)}'
5
27.01.2020, 21:49

Пара вкладышей perl one -:

  1. разбиение каждой строки на символы:

    perl -F'' -lane 'print join "", splice(@F, -6), @F' file
    
  2. с использованием подстрок

    perl -lpe '$_ = substr($_, -6). substr($_, 0, $#_ - 6)' file
    
0
27.01.2020, 21:49

Теги

Похожие вопросы