Se você sabe que os nomes dos seus arquivos não contêm caracteres de nova linha, os seguintes comandos funcionarão:
Extraia o terceiro resultado de find
usando head
e tail
:
find <PATH> <EXPRESSION> | head -n 3 | tail -n 1
Extraia o terceiro resultado de find
usando sed
:
find <PATH> <EXPRESSION> | sed '3q;d'
Extraia o terceiro resultado de find
usando awk
:
find <PATH> <EXPRESSION> | awk 'NR==3{print;exit}'
Aqui está o que parece ser o uso dos comandos em sua postagem:
find ! -newer "$(readlink current)" | sed '3q;d'
Se você quiser manipular arquivos cujos nomes possam conter novas linhas, use a opção -print0
e faça um loop pelos resultados, por exemplo, algo como o seguinte:
find . -print0 | (\
IFS=$'mkdir /tmp/test
cd /tmp/test
touch $'file1 line12file1 line2'
touch $'file2 line12file2 line2'
touch $'file3 line12file3 line2'
find . -print0 | (\
n=0; \
while read -r -d '' line; do \
((n++)); if [[ $n -eq 3 ]]; then \
echo "${line}"; \
break; \
fi; \
done)
' \
n=0; \
while read -r -d '' line; do \
((n++)); if [[ $n -eq 3 ]]; then \
echo "${line}"; \
break; \
fi; \
done)
Para verificar se isso funciona, você pode realizar algo como o seguinte experimento:
./file3 line1
file3 line2
Isso produz a seguinte saída (conforme esperado):
find <PATH> <EXPRESSION> | head -n 3 | tail -n 1