Требуется несколько переменных или массив. С awk
:
awk 'NR==2||NR==3{a[i++]=$0;next} NR==5{print;for(c=0;c<i;c++){print a[c]}next}1' file
NR = = 2 | | NR = = 3
, если это линия 2 или строка 3
a [i++] = $0; затем
заполните массив a
и продолжите. NR = 5
, если это линия 5
печать
сначала печать строки. для (c = 0; c < i; c++) {печати цикла [c]}
через массив и печати его содержимого. 1
является истинным условием печати каждой строки. Попробуйте:
$ awk '
FNR == 2 { l2 = $0; next } # Save 2nd line
FNR == 3 { l3 = $0; next } # Save 3rd line
FNR == 5 { # Print 5th line, follow 2nd, 3rd
print
print l2
print l3
next
}
1 # Print other lines
' <file
Обратите внимание, что при потере 2-й и 3-й строк файл содержит менее пяти строк.
Да, если EUID процесса доступа совпадает с пользователем-владельцем, проверяются только разрешения пользователя. Если нет, но GID процесса совпадают с группой-владельцем, то проверяются разрешения группы. В противном случае используются «другие» разрешения. Мяч останавливается на первом совпадении.
Для пользователя нет особого смысла иметь меньший доступ, чем для группы, поскольку обычно пользователь-владелец может просто изменить разрешения и предоставить себе любой доступ, который ему нравится. (за исключением SELinux и т. д.)
Но в случае группы против других это может иметь смысл :вы можете запретить доступ к определенной группе, разрешив его всем остальным. Например. для файла, принадлежащего someuser:somegroup
, с разрешениями rw----r--
, члены somegroup
не могут получить к нему доступ, но любой, кто не является членом somegroup
, может прочитать файл.