繁体   English   中英

如何用sed在shell中的两个特定字符([]括号)之间的文本?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM