我想使用sed命令提取特定的char

时间:2016-12-17 15:29:49

标签: sed

我想从跟随txt文件

中提取/battle/result
$ cat sample
user_id=1234 /battle/start

我按照sed命令运行

$ cat sample | sed 's|.*\(/.*\)|\1|g'
/start

但是,结果是删除了/battle,所以我无法按照自己的意愿提取它。

它出了什么问题?

4 个答案:

答案 0 :(得分:1)

您可以删除最后一个空格的所有字符:

$ sed 's/.* //' <<< "user_id=1234 /battle/start"
/battle/start

或使用cut

$ cut -d' ' -f2 <<< "user_id=1234 /battle/start"
/battle/start

答案 1 :(得分:0)

Sed会尝试进行贪婪(最大)匹配,因此.*会匹配您的整行但不包括第二个/

尝试:

< sample sed 's|.* \(/.*\)|\1|g'

< sample sed 's|[^/]*\(/.*\)|\1|g'

答案 2 :(得分:0)

在您的RE中,*。贪婪并吞下/battle部分,您可以尝试反转逻辑并删除/前面的所有内容:

cat sample | sed 's/[^/]*//'

此处[^/]*匹配不是/的everthing,并将其替换为空。

答案 3 :(得分:0)

echo  user_id=1234 /battle/start |grep -oP '\s\K.*'
/battle/start

echo  user_id=1234 /battle/start |sed -r 's/(^.*\s)(.*)/\2/g'
/battle/start