需要 sed awk 或 grep 输出来提取字符串

需要 sed awk 或 grep 输出来提取字符串

我的输出如下:

"vancouver/news/vancouver-voices": {
    "status": 0,
    "time": 0,
    "timestamp": 1371298701
},
"vancouver/news/vancouvers-march-second-annual-success": {
    "status": 0,
    "time": 0,
    "timestamp": 1371298701
}

我只需要提取部分 URL(vancouver/news/vancouvers-march-second-annual-success and vancouver/news/vancouver-voices例如)

我基本上是通过 bash 调用命令,然后将其通过管道传输到 grep awk 或 sed

如果我使用 grep ( | grep -o '".*": {'),我可以接近结果。我最终得到如下输出:

"vancouver/news/vancouver-voices": {
"vancouver/news/vancouvers-march-second-annual-success": {

不过我怀疑我需要使用 sed 或 awk。我尝试了几种方法,但我认为我需要转义一些特殊字符。例如,我尝试了| awk '\"(.*)\": {' --output='$1',但由于反斜杠,它失败了。

有没有 sed 或 awk 专家可以告诉我如何正确地转义特殊字符?

答案1

awk '/{/ {print $2}' FS='"'

结果

vancouver/news/vancouver-voices
vancouver/news/vancouvers-march-second-annual-success

然而这样做会更好 使用 jq

答案2

解决方案sed

sed -n '/{/s="\([^"]*\)".*=\1=p'

grep+ cut

grep '{' | cut -d'"' -f2

答案3

您仍然可以使用 grep:

| grep -o '[^"/]\+\(/[^"/]\+\)\+'

产量:

vancouver/news/vancouver-voices
vancouver/news/vancouvers-march-second-annual-success

它搜索以非“”,非/字符组成的初始字符串,后跟一个或多个由斜杠和与初始字符串相同类型的字符串组成的序列。还可以使用字母数字加破折号字符类来选择 URL 组件。

相关内容