Удалить дубликаты в файле

С помощью zsh, чтобы вывести список каталогов в текущем каталоге, которые содержат файл musthave, а не файл mustnothave:

contain() [[ -e $REPLY/$1 || -L $REPLY/$1 ]]

printf '%s\n' *(D/e(contain musthave)^e(contain mustnothave))

Обратите внимание, что выполнение:

find... -exec sh -c 'ls {}' \;

не только не переносим, ​​но и является уязвимостью для внедрения команд. Например, если есть каталог с именем $(reboot)или ;reboot, в нем будут запущены командные строки ls $(reboot)или ls ;reboot, вызывающие перезагрузку. {}никогда не следует встраивать в аргумент кода (языка shили любого другого языка ), где он может быть неверно истолкован. Используйте:

find... -exec sh -c 'ls "$1"' sh {} \;

вместо этого.

1
16.06.2019, 13:02
2 ответа

Предполагая , что файл предназначен для формата

field1\n
field2\n
\n
field1\n
field2\n
\n

т. е. последняя строка в файле примера должна читаться как

Mysteriosa                  Mysteriosa

, тогда это должно помочь, при условии, что после последней записи есть завершающая новая строка \n

sed '$!N;$!N;s/\n/:/g' file | nl -s"|" | sort -t '|' -k2 | awk -F"|" '!_[$2]++' | sort -n | sed -e 's/.*|//' -e 's/:/\n/g'
0
28.04.2021, 23:32

Команда:

awk '{if (!seen[$1,$2]++)print $0}' filename
0
28.04.2021, 23:32

Теги

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