从方括号和引号中提取字符串

时间:2018-09-07 19:30:55

标签: linux bash awk sed

我试图提取以下形式的字符串:

[["abc"]] --> abc

所以我写了echo "[[\"abc\"]]" | sed -e 's/\[\[\"//g' | sed -e 's/\"\]\]//g'

它工作正常,但看起来非常丑陋。我非常确定对于这样一个简单的案例,应该有一个更整洁的解决方案吗?

您能为此建议一些sedawk增强功能吗?

4 个答案:

答案 0 :(得分:3)

您可以将单个替换项与捕获组一起使用:

echo '[["abc"]]' | sed 's/\[\["\([^"]*\)"\]\]/\1/g'

您也不需要在正则表达式中转义"

答案 1 :(得分:2)

对于sed,使命令更加简洁的一种方法是使用捕获组和反向引用:

echo "[[\"abc\"]]" | sed -e 's/\[\["\(.*\)"\]\]/\1/g'
> abc

答案 2 :(得分:2)

如果您只是想查找双引号之间的内容,请尝试

echo '[["abc"]]' | awk -F\" '{print $2}'

希望这会有所帮助

答案 3 :(得分:2)

只需删除不需要的字符

$ echo "[[\"abc\"]]" | tr -d '[]"'
abc