我想从跟随txt文件
中提取/battle/result
$ cat sample
user_id=1234 /battle/start
我按照sed命令运行
$ cat sample | sed 's|.*\(/.*\)|\1|g'
/start
但是,结果是删除了/battle
,所以我无法按照自己的意愿提取它。
它出了什么问题?
答案 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