Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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 删除方括号外的所有数据_Linux_Bash_Shell - Fatal编程技术网

Linux 删除方括号外的所有数据

Linux 删除方括号外的所有数据,linux,bash,shell,Linux,Bash,Shell,如何删除方括号之外的所有数据[] 示例:来自 [lipsum1;limpsum1;lipsum1] lipsum2;[lipsum1;limpsum1;lipsum1] lipsum2 我想获得: [lipsum1;limpsum1;lipsum1] [lipsum1;limpsum1;lipsum1] 您可以使用[和]作为字段分隔符,并每隔2个字段打印一次: awk -F '[][]' '{for (i=2; i<NF; i+=2) printf "[%s]%s", $i, OFS;

如何删除方括号之外的所有数据
[]

示例:来自

[lipsum1;limpsum1;lipsum1] lipsum2;[lipsum1;limpsum1;lipsum1] lipsum2
我想获得:

[lipsum1;limpsum1;lipsum1] [lipsum1;limpsum1;lipsum1]

您可以使用
[
]
作为字段分隔符,并每隔2个字段打印一次:

awk -F '[][]' '{for (i=2; i<NF; i+=2) printf "[%s]%s", $i, OFS; print ""}' <<END
[lipsum1;limpsum1;lipsum1] lipsum2;[lipsum1;limpsum1;lipsum1] lipsum2
a [b] c [d] e
nothing here
[one thing]
END
这个奇怪的字段分隔符
[]]
是一个正则表达式,它匹配
[
字符或
]
字符。当给出示例输入时,awk将分解如下字段:

  • “”(空字符串)
  • “lipsum1;lipsum1;lipsum1”
  • “lipsum2;”(带前导空格)
  • “lipsum1;lipsum1;lipsum1”
  • “lipsum2”(带前导空格)
  • 因此,您可以看到,您希望输出字段2和4(将括号添加到后面),中间有一个空格。
    for
    循环迭代字段2、4、6等。
    printf
    命令根据需要格式化输出——默认的OFS(输出字段分隔符)是一个空格。

    print”“
    行只在循环完成后添加换行符。

    您可以使用
    [
    ]
    作为字段分隔符,每2个字段打印一次:

    awk -F '[][]' '{for (i=2; i<NF; i+=2) printf "[%s]%s", $i, OFS; print ""}' <<END
    [lipsum1;limpsum1;lipsum1] lipsum2;[lipsum1;limpsum1;lipsum1] lipsum2
    a [b] c [d] e
    nothing here
    [one thing]
    END
    
    $ sed -e 's/^[^\[]*//;s/\][^\[]*\[/\] \[/g;s/[^]]*$//;' <<'EOF'
    lipsum0 [lipsum1;limpsum1;lipsum1] lipsum2;[lipsum1;limpsum1;lipsum1] lipsum2
    EOF
    [lipsum1;limpsum1;lipsum1] [lipsum1;limpsum1;lipsum1]
    
    这个奇怪的字段分隔符
    []]
    是一个正则表达式,它匹配
    [
    字符或
    ]
    字符。当给出示例输入时,awk将分解如下字段:

  • “”(空字符串)
  • “lipsum1;lipsum1;lipsum1”
  • “lipsum2;”(带前导空格)
  • “lipsum1;lipsum1;lipsum1”
  • “lipsum2”(带前导空格)
  • 因此,您可以看到,您希望输出字段2和4(将括号添加到后面),中间有一个空格。
    for
    循环迭代字段2、4、6等。
    printf
    命令根据需要格式化输出——默认的OFS(输出字段分隔符)是一个空格。

    print”“
    行只在循环完成后添加换行符。

    $sed-e's/^[^\[]*/;s/\][^\[]*[/\]\[/g;s/[^]]*/;“
    $sed-e's/^[^\[]*/;s/\][^\[]*\[*\[/\]\\[/g;s/^]]*$/;“仅供参考,这些是方括号,不是圆括号。仅供参考,这些是方括号,不是圆括号。这将在每行末尾添加一个空格,除了空行。不行!商业秘密!;)我将在我的回答中添加一些注释这将在每行末尾添加一个空格,除了空行。不行!商业秘密!;)我将在我的回答中添加一些注释@I0b0,它工作顺利,谢谢,但好奇…你说标准化是什么意思?没有不匹配的单个
    [
    ]
    字符。@I0b0,它工作顺利,谢谢,但好奇…你说标准化是什么意思?没有不匹配的单个
    [
    ]
    字符。
    $ sed -e 's/^[^\[]*//;s/\][^\[]*\[/\] \[/g;s/[^]]*$//;' <<'EOF'
    lipsum0 [lipsum1;limpsum1;lipsum1] lipsum2;[lipsum1;limpsum1;lipsum1] lipsum2
    EOF
    [lipsum1;limpsum1;lipsum1] [lipsum1;limpsum1;lipsum1]