我尝试在shell中使用sed在两个特定字符之间获取shell中的文本,但它似乎无法工作。
我尝试从“[”和“]”
获取文字[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命令后,它仍包含括号
我试图在这里搜索一些替代品,但无法找到工作的东西。
有什么建议吗? 感谢
答案 0 :(得分:1)
你没有得到预期的输出,因为
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的内容,由(.*)
答案 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
答案 2 :(得分: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
答案 3 :(得分:0)
你可以试试这个。
sed -r 's/(\[)(.*)(\])/\2/g'