Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用sed获取shell中两个特定字符([]括号)之间的文本?_Linux_Shell_Sed - Fatal编程技术网

Linux 如何使用sed获取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在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时,命令后面仍然包含括号

我试着在这里寻找一些替代品,但找不到一件有用的东西

有什么建议吗?
谢谢

您没有得到预期的输出,因为

  • 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
最后是一些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'