AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / 问题

Perguntas[perl](unix)

Martin Hope
jsx97
Asked: 2025-04-15 04:03:18 +0800 CST

Por que meus nomes de arquivo UTF-8 sempre correspondem a uma expressão de colchetes regex em Perl?

  • 9

Aqui está um script para corrigir nomes de arquivos cirílicos quebrados se os arquivos foram movidos do Windows para o Mac (com base em uma resposta para Reverter nomes de arquivos depois que eles foram corrompidos pelo uso de codificação diferente )

#!/bin/zsh

# Usage: <script> <target directory>
# Requires Perl::Rename

find "$1" -mindepth 1 -print0 |
  rename -0 -d -e '
    use Unicode::Normalize qw(NFC);
    use Encode qw(:all);

    if ($_ =~ /[†°Ґ£§•¶І®©™Ђђ≠]/) {
      my $check = DIE_ON_ERR | LEAVE_SRC;
      my $new = eval {encode("UTF-8",
                      decode("cp866",
                      encode("mac-cyrillic",
                      NFC(decode("UTF-8", $_, $check)), $check), $check))
                     };
      if ($new) {$_ = $new;} else {warn $@;}
    }'

Quero que ele renomeie apenas os arquivos no diretório de destino que tenham pelo menos um dos seguintes caracteres em seus nomes: †°Ґ£§•¶І®©™Ђђ≠. Mas, por algum motivo, o script renomeia todos os arquivos ali: por exemplo, um nome de arquivo correto срочно.txté alterado para um ёЁюўэю.txt. O que estou fazendo errado?

O caminho para minha pasta de teste é simples /Users/john/scripts/test: sem espaços, sem caracteres cirílicos ou especiais.

O script é usado no macOS e com a versão BSD do find.

Uma atualização dois dias após a resposta à pergunta: as versões Chazelas e Choroba do Stéphane funcionam bem para mim. A versão do Terdon ainda não funciona.

perl
  • 4 respostas
  • 1238 Views
Martin Hope
jsx97
Asked: 2025-03-16 08:53:41 +0800 CST

Perl: O módulo está instalado, mas não funciona

  • 5

Lembro que instalei o Perl::Rename usando cpan -i File::Rename, e de fato tenho os executáveis $HOME/perl5/bin​​with renamee unsafe-renamelá.

Mas quando tento usar rename,

# Expected: Renames FooBar.txt to Foo_Bar.txt
# It worked for me in the past
rename 's/\s/_/' *.txt

...há um erro:

Can't locate File/Rename.pm in @INC (you may need to install the File::Rename module) (@INC contains: /Library/Perl/5.34/darwin-thread-multi-2level /Library/Perl/5.34 /Network/Library/Perl/5.34/darwin-thread-multi-2level /Network/Library/Perl/5.34 /Library/Perl/Updates/5.34.1 /System/Library/Perl/5.34/darwin-thread-multi-2level /System/Library/Perl/5.34 /System/Library/Perl/Extras/5.34/darwin-thread-multi-2level /System/Library/Perl/Extras/5.34) at ./rename line 4.
BEGIN failed--compilation aborted at ./rename line 4.

Então tentei reinstalar File::Rename, usando o mesmo comando, mas então aparece outra mensagem de erro, uma bem longa. Aqui está uma parte do finalzinho:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ERROR: Can't create '/Library/Perl/5.34/File'
mkdir /Library/Perl/5.34/File: Permission denied at /System/Library/Perl/5.34/ExtUtils/Install.pm line 470.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 at -e line 1.
make: *** [pure_site_install] Error 13
  RMBARKER/File-Rename-2.02.tar.gz
  /usr/bin/make install  -- NOT OK

O que está acontecendo aqui?

O Perl em si é o que vem com o macOS. Eu não o instalei.

perl
  • 1 respostas
  • 51 Views
Martin Hope
PersianGulf
Asked: 2025-02-02 20:46:08 +0800 CST

Tentativa de chamar método de importação indefinido com argumentos ("abs2rel") via pacote "File::Spec"

  • 7

Eu tenho Debian GNU/Linux trixie/side instalei o publican do repositório do Debian. (O publican está fazendo gravação e publicação para DocBook)
Quando eu executo publican, ele recebo as seguintes mensagens:

Attempt to call undefined import method with arguments ("abs2rel") via package "File::Spec" (Perhaps you forgot to load the package?) at /usr/share/perl5/Publican/TreeView.pm line 12.
Duplicate specification "help" for option "help"
Can't open publican: No such file or directory at /usr/bin/publican line 646.

A versão do meu publican é 4.3.2-4.
Também instalei libfile-spec-native-perlo pacote do repositório.

Então eu baixo o código fonte via:

apt source publican

Em seguida, execute publican e obtenha o seguinte erro:

mohsen@debian:~/src-compiled/publican/publican-4.3.2/bin$ ./publican 
Attempt to call undefined import method with arguments ("abs2rel") via package "File::Spec" (Perhaps you forgot to load the package?) at /usr/share/perl5/Publican/TreeView.pm line 12.
Duplicate specification "help" for option "help"

Action required!

De acordo com a string acima Action Required!adicionada à saída.

Não sei como resolver isso.
Você me deixa feliz se resolver meu problema.

perl
  • 1 respostas
  • 107 Views
Martin Hope
nixnut
Asked: 2024-10-04 14:19:32 +0800 CST

como extrair useragent completo (com espaços) do arquivo de log

  • 5

linha do arquivo de log

4/10/2024--06:00pm guest 192.168.1.2 https://nixnut.nz/home/accounts/hosting.cgi?action=getonline Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0

no arquivo logview eu tenho

open (FILE, "tail -$form{'howmany'} $file | tail -$form{'howmany'} |") or die "Opening $file: $!";

  while (<FILE>) {
    chomp;
    s/^\"//;
    s/\"$//;
    my ($date, $user, $host, $page, $browser) = split(' ', $_);
print "<tr bgcolor=black>";
print "<td bgcolor=white align=left valign=top>$font $date</td>";
print "<td bgcolor=white align=left valign=top><a href=http://nixnut.nz/$user target=_blank>$font $user</a></td>";
print "<td bgcolor=white align=left valign=top>$font <a href=https://www.iptolocation.io/ip-lookup/$host target=_blank>$host</a></td>";
print "<td bgcolor=white align=left valign=top>$font <a href=http://$host target=_blank>$host</a></td>";
print "<td bgcolor=white align=left valign=top><a href=$page target=_blank>$font $page</a></td>";
print "<td bgcolor=white align=left valign=top>$font $browser</td>";
print "</tr>\n";
  }
  close (FILE);

a saída é

4/10/2024--06:00pm  guest   192.168.1.2 192.168.1.2 https://nixnut.nz/home/accounts/hosting.cgi?action=getonline    Mozilla/5.0

faltando o useragent completo devido a espaços

Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0       
perl
  • 2 respostas
  • 42 Views
Martin Hope
Uwe
Asked: 2024-08-07 20:26:56 +0800 CST

perl: Use "-" para entrada padrão com 3 argumentos abertos

  • 5

A versão antiga de 2 argumentos de open(ou seja, open FILEHANDLE,EXPR) para abrir um arquivo em perl está obsoleta. Por motivos de segurança, deve ser substituído pela versão de 3 argumentos open FILEHANDLE,MODE,EXPR. Porém, há um caso em que a versão com 3 argumentos se comporta de maneira diferente da versão com 2 argumentos:

2-arg openinterpreta o nome do arquivo especial -como entrada padrão. Por exemplo, ambos

echo foo | perl -e 'open my $fh, "-"; $_ = <$fh>; print $_;'

e

echo foo | perl -e 'open my $fh, "<-"; $_ = <$fh>; print $_;'

produzir a saída foo. Na versão de 3 argumentos, a interpretação especial de -desapareceu, entretanto:

echo foo | perl -e 'open my $fh, "<", "-"; $_ = <$fh>; print $_;'

não imprime nada.

Qual é a maneira padrão ou recomendada de emular esse recurso de 2-arg openusando 3-arg open? (Na aplicação concreta, o nome do arquivo é um argumento do programa que pode ou não ser -.)

perl
  • 1 respostas
  • 31 Views
Martin Hope
Dan Jacobson
Asked: 2024-07-25 08:32:36 +0800 CST

Onde estão documentados os arrays Perl @0, @9999?

  • 9
$ perl -wle 'my @388=0..2;'
Can't use global @388 in "my" at -e line 1, near "my @388"
Execution of -e aborted due to compilation errors.
$ perl -wle '@388=0..2;'
$

Onde posso aprender mais sobre o misterioso @0 ... @9999 do Perl, etc.?

perl
  • 1 respostas
  • 222 Views
Martin Hope
manylya
Asked: 2024-06-13 07:49:48 +0800 CST

O que significa a linha ($eachJOBID = $eachScriptNoPath) =~ s/\.csh// ; fazer?

  • 5

Essa linha que tenho no meu código corta o .csh de uma string e retorna o restante dela. Alguém pode explicar o que cada parte faz?

($eachJOBID = $eachScriptNoPath) =~ s/\.csh// ;
perl
  • 1 respostas
  • 31 Views
Martin Hope
k.schroeder31
Asked: 2024-04-27 00:02:31 +0800 CST

Por que um comando process ps mostra espaços em torno de um diretório em vez de barras?

  • 8

Estou tentando depurar um monitor de processo legado com falha que pesquisa processos em execução. Eu determinei que isso está sendo causado por algum comportamento misterioso do Linux. O processo que está sendo executado é /opt/my/path/directoryname/daemonname, mas por algum motivo estranho, ele aparece com espaços, não /, ao redor do nome do diretório. Muitos daemons estão sendo executados no mesmo diretório e aparecem com o caminho correto. É apenas um daemon específico em cada servidor.

ps -efmostra o seguinte para este daemon:

/opt/my/path directoryname daemonname --arg1 VALUE1 --arg-two VALUE.TWO --arg-three ARG.UMENT.THREE.ERR --worker daemonname --pid-role daemonname

Este daemon está sendo iniciado por um script perl. Comparando-o com outros, parece que o caminho do diretório está sendo fornecido usando exatamente a mesma variável env de todos os outros scripts, mas esses outros scripts resultam em um caminho correto como /opt/my/path/directoryname/daemonname. As linhas Perl relevantes se parecem com exec => catfile( $settings->config("/directories/executables"), $daemon_name ),e eu confirmei que o valor de config("/directories/executables") é o valor correto/opt/my/path/directoryname

Procurar por esta pergunta tem sido um pesadelo devido a todas as perguntas sobre nomes de diretórios com espaços. Isto não é isso. Nenhum caminho deve conter um espaço. ps mostra meu comando mkdir com um espaço onde eu tinha uma barra é o mais próximo que consegui encontrar, que não foi respondido.

perl
  • 1 respostas
  • 293 Views
Martin Hope
Thomas
Asked: 2024-02-24 20:04:48 +0800 CST

AWStats travado, mas nenhuma saída no strace: como depurar?

  • 5

Um script Perl está travado,

root     1317478 99.8  0.0 264072 22516 ?        R    04:57 478:37 /usr/bin/perl /usr/share/awstats/wwwroot/cgi-bin/awstats.pl -config=domain.tld-http -staticlinks -configdir=/usr/local/psa/etc/awstats -output=keywords

mas quando eu strace -f -p, só obtenho a saída

strace: Process 1317478 attached [ Process PID=1317478 runs in x32 mode. ]

Qual é o próximo passo para descobrir o que está acontecendo?

perl
  • 1 respostas
  • 20 Views
Martin Hope
U. Windl
Asked: 2023-11-13 15:54:41 +0800 CST

É possível verificar o endereço do peer antes de aceitar uma conexão TCP?

  • 9

Eu escrevi um servidor Perl simples que escuta em uma porta/soquete TCP, aceitando conexões. Agora eu me pergunto:

Ao querer implementar o controle de acesso baseado em endereço, é possível verificar o endereço do peer que solicita uma conexão antes de aceitá-la?

Se possível, eu poderia rejeitar a solicitação de conexão (espero) em vez de aceitar a conexão e fechá-la imediatamente novamente.

perl
  • 4 respostas
  • 1322 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve