Perl 如何删除以斜杠开头的字符串部分

Perl 如何删除以斜杠开头的字符串部分,perl,Perl,如何使用perl脚本删除斜杠后的所有字符串?假设我有如下的输入文件 例如: hdkhehfkf/kfkjhoer 082734708/92740234 我想要的输出是 hdkhehfkf 082734708 这是我的密码 #!/usr/bin/perl use strict; use warnings; my $file = "file.sv"; my $dirname = "../../../folder/"; open ( OUTFILE, ">uncompile

如何使用perl脚本删除斜杠后的所有字符串?假设我有如下的输入文件

例如:

hdkhehfkf/kfkjhoer
082734708/92740234
我想要的输出是

hdkhehfkf
082734708
这是我的密码

#!/usr/bin/perl
use strict;
use warnings;

my $file  = "file.sv";
my $dirname       = "../../../folder/";

open ( OUTFILE, ">uncompile_test.txt" );
main ();
close OUTFILE;


sub main {
   my @array;

   open( my $fh, "<", "$dirname/$file")
       or die "Failed to open file: $!\n";

   while(<$fh>) { 
       push @array, $_; 
   } 

   close $fh;

   print OUTFILE " ", @array;   
}

您可以尝试在/上拆分输入字符串,然后只保留拆分后的第一部分:

my $input = 'hdkhehfkf/kfkjhoer';   
my @parts = split /\//, $input;
print $parts[0];
这张照片是:

hdkhehfkf

您可以尝试在/上拆分输入字符串,然后只保留拆分后的第一部分:

my $input = 'hdkhehfkf/kfkjhoer';   
my @parts = split /\//, $input;
print $parts[0];
这张照片是:

hdkhehfkf
使用

表情

'hdkhehfkf/kfkjhoer' =~ s|/.*||r
返回字符串

'hdkhehfkf'
使用

表情

'hdkhehfkf/kfkjhoer' =~ s|/.*||r
返回字符串

'hdkhehfkf'

删除字符串中的最后一个斜杠及其后面的所有内容

$string =~ s{.*\K/.*}{};
$string =~ s{/.*}{};
其中\K删除所有以前的匹配项,这样就不会从字符串中使用它们,因此我们不必捕获并放回第一个。*。请参阅\K的环顾断言。我们首先需要它。*以便通过*的贪婪性到达最后/

删除字符串中的第一个斜杠及其后的所有内容

$string =~ s{.*\K/.*}{};
$string =~ s{/.*}{};
我使用{}{}分隔符来避免模式中的转义/转义

以你的例子来说,这两种方法都是有效的。它们都会更改$string,然后您可以打印它

如果这是关于使用路径的,那么我建议使用一些好的模块

该问题被大量编辑,并添加了代码

对文件的每一行运行此命令,并将输出保存到另一个文件中

open my $fh_out, '>', $outfile or die "Can't open $outfile: $!";
open my $fh,     '<', $file    or die "Can't open $file: $!";

while (<$fh>) {
    print $fh_out s{.*\K/.*}{}r;
}

close $_ for $fh, $fh_out.
你会称之为

process_file_to_output($dirname, $file, $outfile_handle);
其中$outfile_handle是词法!输出文件的filehandle,如果您希望像问题中那样在调用者中打开输出文件

命名sub main的信息量不大。为变量、函数和其他程序元素选择好的名称在编程中非常重要

为输出文件使用词法文件句柄和三个参数open,并检查open调用,就像在子文件中为输入文件所做的一样


删除字符串中的最后一个斜杠及其后面的所有内容

$string =~ s{.*\K/.*}{};
$string =~ s{/.*}{};
其中\K删除所有以前的匹配项,这样就不会从字符串中使用它们,因此我们不必捕获并放回第一个。*。请参阅\K的环顾断言。我们首先需要它。*以便通过*的贪婪性到达最后/

删除字符串中的第一个斜杠及其后的所有内容

$string =~ s{.*\K/.*}{};
$string =~ s{/.*}{};
我使用{}{}分隔符来避免模式中的转义/转义

以你的例子来说,这两种方法都是有效的。它们都会更改$string,然后您可以打印它

如果这是关于使用路径的,那么我建议使用一些好的模块

该问题被大量编辑,并添加了代码

对文件的每一行运行此命令,并将输出保存到另一个文件中

open my $fh_out, '>', $outfile or die "Can't open $outfile: $!";
open my $fh,     '<', $file    or die "Can't open $file: $!";

while (<$fh>) {
    print $fh_out s{.*\K/.*}{}r;
}

close $_ for $fh, $fh_out.
你会称之为

process_file_to_output($dirname, $file, $outfile_handle);
其中$outfile_handle是词法!输出文件的filehandle,如果您希望像问题中那样在调用者中打开输出文件

命名sub main的信息量不大。为变量、函数和其他程序元素选择好的名称在编程中非常重要

为输出文件使用词法文件句柄和三个参数open,并检查open调用,就像在子文件中为输入文件所做的一样



Perl不是PHP,您可以使用组合表达式。拆分“/”,“hdkhehfkf/kfkjhoer”[0]的作用相同,但更短。@daxim信不信由你,我真的不知道PHP或Perl:PPerl不是PHP,你可以组合表达式。拆分“/”、“hdkhehfkf/kfkkjhoer”[0]的作用相同,但较短。@daxim信不信由你,我真的不懂PHP或Perl:pp请提供你的代码,不仅是你想要的更新我的问题,谢谢请提供你的代码,不仅是你想要的更新我的问题,谢谢我编辑我的问题。你能再复习一遍吗?thanks@daffodil哦,我明白了。您的代码没有显示在何处执行此操作-您的意思是对输入文件的每一行进行这些更改吗?是的,上面的代码没有任何作用。它只是打印出文件的内容。需要有关如何更改以显示输出的帮助吗above@daffodil好的,但是对什么进行更改?在文件的每一行?@daffodil都在问题I编辑我的问题中添加了一些关于代码的注释。你能再复习一遍吗?thanks@daffodil哦,我明白了。您的代码没有显示在何处执行此操作-您的意思是对输入文件的每一行进行这些更改吗?是的,上面的代码没有任何作用。它只是打印出文件的内容。需要有关如何更改以显示输出的帮助吗above@daffodil好的,但是对什么进行更改?在文件的每一行?@daffodil都对问题中的代码添加了一些注释