了解从Perl脚本

时间:2016-01-04 09:27:10

标签: linux perl shell

有人可以告诉我下面两个代码的定义吗?

$file_directory =~ s/[^\\\/]+$//;

$new_id =~ m/([ABCISRDT]\d\d\.\d\d\.\d\d)$/i)

它类似于下面的代码,但语法不同

$string_to_change =~ s/pattern_to_look_for/string_to_replace_with/g;

我理解s / [是搜索,^行的开头"符号和$是行尾"符号;我不明白是\ /] +。

假设文件目录是W:\ folder_1 \ music \ common在Perl脚本中它应该是W:\\ folder_1 \\ music \\ common但是它中还有一个\且(我意识到我什么时候)正在输入它需要3 \才能显示2 \)+代表什么?如果我希望将其转换为Linux应该更改是这样的吗?

$file_directory =~ s/[^\\//]+$//;

至于最后一段代码,我需要有人向我解释它的作用谢谢。

2 个答案:

答案 0 :(得分:2)

此表达式

  

$ file_directory = ~s / [^ \\\ /] + $ //;

将匹配最后一个前向或后向斜杠后的所有字符,并将其替换为空。通常这将以目录名称结束。 (请注意,有更安全的方法可以执行此操作,这也是跨平台的。例如Path::Class。)

  • <table style="background-color: blue;" border="0" cellspacing="0" cellpadding="0"> <tr> <td> </td> </tr> </table> 是一个否定的字符类,它将匹配组中没有的任何内容。
  • [^]提供一个或多个匹配
  • +匹配字符串结尾
  

如果我希望将其转换为Linux,那么改变是这样的吗?

由于该行已经检查了两个斜杠,因此该代码应该适用于Linux。

答案 1 :(得分:1)

这些方括号分隔字符类,这意味着列出的任何字符。以^开头的字符类是否定的字符类 - 它意味着其他而不是列出的那些字符。

表达式:

[^\\\/]+$

表示&#34;除了输入结尾处的斜线之外的任何字符中的一个或多个#34;