我尝试在外壳中用 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时,在命令之后,它仍然包含括号
我试图在这里搜索一些替代方案,但找不到工作。
有什么建议吗?谢谢
您没有获得预期的输出,因为
-
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'