2014-09-24 85 views

回答

0

使用替代此:

my $string = "ad9a91/FFFF0000"; 
$string =~ s|\.+/||; 
+0

但它没有单行有'/'字符后有多行随机数据 – user3383729 2014-09-24 13:20:46

+0

@ user3383729对不起我的错。已经修复我的回答 – Jens 2014-09-24 13:24:06

+0

感谢您的评论我可以使用$ _ =〜s | \。+/||; – user3383729 2014-09-24 13:34:23

1

您可以使用替换,

my $str = "ad9a91/FFFF0000"; 
$str =~ s|^.+?/||; 

或正则表达式捕获,

$str = $1 if $str =~ m|/(.+)|s; 
2

桑达解决方案

sed 's|[^/]*/||' file 

将拆除一切直到并包括第一/

sed 's|.*/||' file 

将删除一切,包括最后的/

我加了两个,因为问题并不完全清楚字符串的格式是什么。

awk中

awk -F/ '{$0=$NF}1' file 

该命令替换任何是最后/

+0

你应该解释第一个和第二个版本之间的区别(第二个版本将直到最后一个斜杠替代所有斜线,如果在斜线中出现了几个斜线) – 2014-09-24 17:49:46

+0

它基于你的示例(没有更多的字或字符你展示)。第一个“删除”第一个字符,直到第一个'/'和第二个像你写“删除”,直到最后一个。在这种情况下,它是相同的效果,而不是如果有环绕字/字符,但在这种情况下都是假的(但也超出了上下文)。 – NeronLeVelu 2014-09-25 05:50:17

+1

@CasimiretHippolyte补充说明:) – 2014-09-25 07:21:49

0
my $string = qq(sjdflksdjfsdj ad9a91/FFFF0000 slodjfsdf s); 
$string =~ s{\b(\s).*?\b/}{$1}ig; 
print $string;exit; 

后,你也可以尝试这种分裂与任何空间或任何标签的整条生产线。