Perl 如何删除以斜杠开头的字符串部分
如何使用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
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都对问题中的代码添加了一些注释