AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题

问题[perl](unix)

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

为什么我的 UTF-8 文件名总是与 Perl 中的正则表达式括号表达式匹配?

  • 9

这是一个脚本,用于修复文件从 Windows 移动到 Mac 时损坏的西里尔文文件名(基于对使用不同编码后文件名被乱码后的恢复文件名的回答)

#!/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 $@;}
    }'

我希望它仅重命名目标目录中文件名中至少包含以下字符之一的文件:†°Ґ£§•¶І®©™Ђђ≠。但由于某种原因,脚本会重命名那里的所有文件:例如,正确的文件名срочно.txt更改为无意义的ёЁюўэю.txt。我做错了什么?

我的测试文件夹的路径很简单/Users/john/scripts/test:没有空格,也没有西里尔字母或特殊字符。

该脚本在 macOS 和 BSD 版本上使用find。

问题得到解答两天后的更新:Stéphane 的 Chazelas 和 Choroba 的版本对我来说很好用。Terdon 的版本对我来说还不行。

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

Perl:模块已安装但不起作用

  • 5

我记得我已经使用 安装了 Perl::Rename,cpan -i File::Rename并且事实上我在那里有$HOME/perl5/bin和rename可执行unsafe-rename文件。

但当我尝试使用时rename,

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

...有一个错误:

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.

然后我尝试File::Rename使用相同的命令重新安装,但又出现了另一条错误消息,非常长。以下是最后的一部分:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
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

这里发生什么事了?

Perl 本身是 macOS 附带的。我没有安装它。

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

尝试通过包“File::Spec”调用带有参数(“abs2rel”)的未定义导入方法

  • 7

我已经从 debian 的 repoDebian GNU/Linux trixie/sid安装了publican。(publican 正在为 进行写入和发布DocBook)
当我运行时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"
Can't open publican: No such file or directory at /usr/bin/publican line 646.

我的 publican 版本是4.3.2-4。
我还libfile-spec-native-perl从 repo 安装了软件包。

然后我通过以下方式下载源代码:

apt source publican

然后运行publican,出现以下错误:

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!

根据以上Action Required!字符串添加到输出。

我不知道该如何解决。
如果你解决了我的问题,我会很高兴。

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

如何从日志文件中提取完整的用户代理(有空格)

  • 5

日志文件行

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

在 logview 文件中我有

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);

输出是

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

由于空格而缺少完整的用户代理

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

perl:使用“-”作为带有 3 个参数的标准输入

  • 5

在 perl 中,用于打开文件的旧 2 参数版本open(即)已弃用。出于安全原因,应将其替换为 3 参数版本。不过,有一种情况下,3 参数版本的行为与 2 参数版本不同:open FILEHANDLE,EXPRopen FILEHANDLE,MODE,EXPR

2-argopen将特殊文件名解释-为标准输入。例如,

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

和

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

产生输出foo。在 3 参数版本中,的特殊解释-已经消失:

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

不打印任何内容。

open使用 3-arg 来模拟 2-arg 的这个特性的标准或推荐方法是什么open?(在具体应用中,文件名是程序的一个参数,可能是也可能不是-。)

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

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;'
$

在哪里可以了解有关 Perl 的神秘 @0 ... @9999 等的更多信息?

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

这一行 ($eachJOBID = $eachScriptNoPath) =~ s/\.csh// ; 起什么作用?

  • 5

我代码中的这一行从字符串中截取 .csh 并返回其余部分。有人能解释一下它的每个部分的作用吗?

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

为什么一个进程 ps 命令在目录周围显示空格而不是斜杠?

  • 8

我正在尝试调试一个失败的旧进程监视器,该监视器搜索正在运行的进程。我确定这是由一些神秘的 Linux 行为引起的。正在运行的进程是 /opt/my/path/directoryname/daemonname 但由于某些奇怪的原因,它在目录名周围显示空格,而不是 /。许多守护进程都从同一目录运行,并以正确的路径显示。它只是每台服务器上的一个特定守护进程。

ps -ef显示此守护程序的以下内容:

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

该守护进程由 perl 脚本启动。与其他脚本相比,看起来目录路径是使用与所有其他脚本完全相同的环境变量提供的,但这些其他脚本会产生正确的路径,例如/opt/my/path/directoryname/daemonname. 相关的 perl 行看起来像这样exec => catfile( $settings->config("/directories/executables"), $daemon_name ),,我已经确认 config("/directories/executables") 的值是正确的值/opt/my/path/directoryname

由于所有有关目录名称包含空格的问题,搜索这个问题一直是一场噩梦。这不是那个。任何路径都不应包含空格。 ps 显示了我的 mkdir 命令,其中有一个空格,其中有一个斜线,这是我能找到的最接近的,但没有得到答复。

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

AWStats 卡住了,但 strace 上没有输出:如何调试?

  • 5

Perl 脚本卡住了,

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

但是当我strace -f -p,我只得到输出

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

下一步要做什么才能查明到底发生了什么?

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

在接受 TCP 连接之前是否可以检查对等地址?

  • 9

我编写了一个简单的 Perl 服务器,它侦听 TCP 端口/套接字并接受连接。现在我想知道:

当想要实现基于地址的访问控制时,是否可以在接受连接之前检查请求连接的对等方的地址?

如果可能的话,我可以拒绝连接请求(我希望),而不是接受连接并立即再次关闭它。

perl
  • 4 个回答
  • 1322 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve