[英]how to get the text in shell between two specific character ( [ ] bracket ) with sed?
我试图在外壳中使用sed在两个特定字符之间的外壳中获取文本,但是它似乎不起作用。
我尝试从“ [”和“]”获取文本
[561:0:43:0] -> 561:0:43:0
所以我尝试如下
sed -e '/[/,/]/p' test > test2
测试内容例如:
[561:0:42:0]
[561:0:43:0]
[561:0:478:0]
[561:0:48:0]
[562:0:9:0]
命令后,当我阅读test2仍然包含方括号
我试图在这里搜索一些替代方法,但找不到能工作的东西。
有什么建议吗? 谢谢
您没有得到预期的输出,因为
p
命令打印整个模式空间,(或在sed命令中读取当前行) 您可以使用类似
$ sed -r 's/\[(.*)\]/\1/g' test
561:0:42:0
561:0:43:0
561:0:478:0
561:0:48:0
562:0:9:0
s
命令用\\1
捕获组1的内容替换[]
任何内容,并用(.*)
尝试:
$ grep -o '[0-9:]*' <<< "[561:0:43:0]"
561:0:43:0
$ tr -d '[]' <<< "[561:0:43:0]"
561:0:43:0
$ awk -F'[][]' '{print $2}' <<< "[561:0:43:0]"
561:0:43:0
$ echo "[561:0:43:0]" | cut -d "[" -f2 | cut -d "]" -f1
561:0:43:0
庆典:
$ STR="[561:0:43:0]"
$ STR=${STR#*[}
$ STR=${STR%]*}
$ echo $STR
561:0:43:0
最后是一些perl:
$ perl -l -ne '/\[([0-9:]*)\]/ and print $1' <<< "[561:0:43:0]"
561:0:43:0
如果输入线已经不仅仅是你的更多[...]
令牌,比我建议nu11p01n73R的答案。 如果您的目标只是摆脱[
和]
,那么最简单的答案是:
sed 's/[][]//g' test > test2
证明:
$ sed 's/[][]//g' <<EOF
> [561:0:42:0]
> [561:0:43:0]
> [561:0:478:0]
> [561:0:48:0]
> [562:0:9:0]
> EOF
561:0:42:0
561:0:43:0
561:0:478:0
561:0:48:0
562:0:9:0
你可以试试这个。
sed -r 's/(\[)(.*)(\])/\2/g'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.