GNU head
e tail
desde a versão 8.25 do coreutils tem uma opção -z
para isso.
Com versões mais antigas ou para sistemas não-GNU, você pode tentar trocar
e \n
head
:
find ... -print0 |
tr 'nul_terminated() {
tr 'find . -depth -name $'*\n*' -print0 | nul_terminated sed '
p;h;s,.*/,,;s/\x0/_/g;H;g;s,[^/]*\n,,' | xargs -r0n2 mv
\n' '\nfind ... -print0 |
nul_terminated cmd1 |
nul_terminated cmd2 | xargs -r0 ...
' | "$@" | tr 'find ... -print0 | nul_terminated eval 'cmd1 | cmd2' | xargs -r0 ...
\n' '\nfind ... -print0 |
tr 'nul_terminated() {
tr 'find . -depth -name $'*\n*' -print0 | nul_terminated sed '
p;h;s,.*/,,;s/\x0/_/g;H;g;s,[^/]*\n,,' | xargs -r0n2 mv
\n' '\nfind ... -print0 |
nul_terminated cmd1 |
nul_terminated cmd2 | xargs -r0 ...
' | "$@" | tr 'find ... -print0 | nul_terminated eval 'cmd1 | cmd2' | xargs -r0 ...
\n' '\n%pre%'
}
find ... -print0 | nul_terminated tail -n 12 | xargs -r0 ...
\n' '\n%pre%' |
head |
tr '%pre%\n' '\n%pre%'
'
}
find ... -print0 | nul_terminated tail -n 12 | xargs -r0 ...
\n' '\n%pre%' |
head |
tr '%pre%\n' '\n%pre%'
Note que algumas implementações -print0
não podem lidar com caracteres NUL (e não são obrigados a fazê-lo pelo POSIX), mas onde encontrar suporta head
, tr
e utilitários de texto geralmente suportam caracteres NUL.
Você também pode usar uma função para agrupar qualquer comando entre os dois nul_terminated
s:
Lembre-se de que, em
, um \n
_
significa um caractere de nova linha. Por exemplo, para substituir \x0
por tr
:
( %code% sendo também uma extensão GNU).
Se você precisar executar mais de um filtro comando, você pode fazer:
%pre%Mas isso significa executar alguns comandos %code% redundantes. Como alternativa, você pode executar:
%pre%