Linux 如何使用sed获取shell中两个特定字符([]括号)之间的文本?
我试图用sed在shell中的两个特定字符之间获取shell中的文本,但它似乎不起作用 我尝试从“[”和“]”获取文本 所以我试着如下Linux 如何使用sed获取shell中两个特定字符([]括号)之间的文本?,linux,shell,sed,Linux,Shell,Sed,我试图用sed在shell中的两个特定字符之间获取shell中的文本,但它似乎不起作用 我尝试从“[”和“]”获取文本 所以我试着如下 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时,命令后面仍然包含括号 我试着在这里寻找一些替代品,但找不到一件有用的东西 有什么建议吗? 谢谢您没有得到预期的输出,
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时,命令后面仍然包含括号
我试着在这里寻找一些替代品,但找不到一件有用的东西
有什么建议吗?
谢谢您没有得到预期的输出,因为
命令打印整个图案空间(或在sed命令中读取当前行)p
$ 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
最后是一些perl:
$ perl -l -ne '/\[([0-9:]*)\]/ and print $1' <<< "[561:0:43:0]"
561:0:43:0
$perl-l-ne'/\[([0-9:]*)\]/,如果输入行中包含的不仅仅是您的[…]
标记,而不是我建议的nu11p01n73R的答案,则打印$1'。如果你的目标只是摆脱[
和]
,最简单的答案是:
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's/[]///g'[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'
这些是你在本案中所处理的全部内容吗?因为有任意数量的解决方案cat test | tr-d[]
,sed-e s'/\[\]/'test
,等等。但如果线路更复杂,则需要更复杂的解决方案。
$ 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'