我有路径:删除子,直到第一个标记的正则表达式
GarbageContainingSlashesAndDots/TOKEN/XYZ/TOKEN/ABC
如何coukt删除GarbageContainingSlashesAndDots? 我知道,它是在TOKEN之前,但不幸的是,在字符串中有两个子字符串TOKEN。 使用sed s/.*TOKEN//
让我的字符串/ABC, 但我需要/TOKEN/XYZ/TOKEN/ABC 谢谢!
我有路径:删除子,直到第一个标记的正则表达式
GarbageContainingSlashesAndDots/TOKEN/XYZ/TOKEN/ABC
如何coukt删除GarbageContainingSlashesAndDots? 我知道,它是在TOKEN之前,但不幸的是,在字符串中有两个子字符串TOKEN。 使用sed s/.*TOKEN//
让我的字符串/ABC, 但我需要/TOKEN/XYZ/TOKEN/ABC 谢谢!
分而治之:
$ echo 'Garbage.Containing/Slashes/And.Dots/TOKEN/xyz/TOKEN/abc' |
sed -n 's|/TOKEN/|\n&|;s/.*\n//;p'
/TOKEN/xyz/TOKEN/abc
UPDATE 2:你试过吗?
s!.*\(/TOKEN.+TOKEN.*\)!\1!
UPDATE:只为TOKEN
第一次出现
s/.*?TOKEN//
.*?
比赛:对不起,非贪婪匹配不被sed的
支持试试这个。
是否允许perl而不是sed?
perl -pe 's!.*?(?=/TOKEN)!!'
echo 'GarbageContainingSlashesAndDots/TOKEN/xyz/TOKEN/abc' | perl -pe 's!.*?(?=/TOKEN)!!'
# returns:
/TOKEN/xyz/TOKEN/abc
Sed不支持非贪婪匹配。 Perl会。
+1:谢谢!有趣的是,它被称为“非贪婪匹配”。 – 2011-02-09 13:33:57
echo "./a//...b/TOKEN/abc/TOKEN/xyz"|sed 's#.*\(/TOKEN/.*/TOKEN/.*\)#\1#'
适用于OP的示例,但不适用于标题为“使用正则表达式删除子串直到第一个令牌”的标题中的一般问题 - 您将其移除到最后一个,而不是第一个令牌。 – eumiro 2011-02-09 13:19:16
@eumiro:*耸肩*据说有“字符串TOKEN的两个子串”。 – 2011-02-09 13:30:07
+1:真遗憾,我没有考虑过这个:-)它确实适用于我的特殊情况!谢谢! – 2011-02-09 13:55:26
我觉得你有bash的,所以它可以是一个简单的
$ s="GarbageContainingSlashesAndDots/TOKEN/xyz/TOKEN/abc"
$ echo ${s#*/}
TOKEN/xyz/TOKEN/abc
,或者如果你有红宝石(1.9+)
echo $s | ruby -e 'print gets.split("/",2)[-1]'
谢谢你的所有建议,我学到了一些新东西。 最后,我竟然可以达到用grep我的目标-o
echo "GarbageContainingSlashesAndDots/TOKEN/xyz/TOKEN/abc" | grep -o "/TOKEN/.*/TOKEN/.*"
使用grep
:
word='GarbageContainingSlashesAndDots/TOKEN/xyz/TOKEN/abc'
echo $word | grep -o '/.*'
我的坏,纠正它 – aorcsik 2011-02-09 13:17:49