Sed 优化多个表达式,包括空格和方括号

Sed 优化多个表达式,包括空格和方括号,sed,Sed,我有以下命令运行良好,但仅出于学习目的,我想知道如何将sed的以下三个表达式组合成一个: bash [user@localhost]$ echo '[lib:Library10] [idx:10] [Fragment] [75] [color]'| sed -e 's/\]//g' -e 's/\[//g' -e 's/\s\+/\t/g' -e 's/\:/\t/' lib Library10 idx:10 Fragment 75 color

我有以下命令运行良好,但仅出于学习目的,我想知道如何将sed的以下三个表达式组合成一个:

bash
[user@localhost]$ echo '[lib:Library10] [idx:10] [Fragment] [75] [color]'| sed -e 's/\]//g'  -e 's/\[//g' -e 's/\s\+/\t/g' -e 's/\:/\t/'

lib     Library10       idx:10  Fragment        75      color

可以将其分为两个块:

$ sed -re 's/(\]|\[)//g' -e 's/(\s+|\:)/\t/g' <<< "[lib:Library10] [idx:10] [Fragment] [75] [color]"
lib     Library10       idx     10      Fragment        75      color
按件:

sed -e 's/\]//g'  -e 's/\[//g'
可压实为:

sed -re 's/(\]|\[)//g'
通过将条件与condition1 | condition2语句以及sed的-r连接起来

另一个表达式也是如此

作为旁注,tr最好删除[,]字符:

要将:替换为\t,还可以使用tr:


可以将其分为两个块:

$ sed -re 's/(\]|\[)//g' -e 's/(\s+|\:)/\t/g' <<< "[lib:Library10] [idx:10] [Fragment] [75] [color]"
lib     Library10       idx     10      Fragment        75      color
按件:

sed -e 's/\]//g'  -e 's/\[//g'
可压实为:

sed -re 's/(\]|\[)//g'
通过将条件与condition1 | condition2语句以及sed的-r连接起来

另一个表达式也是如此

作为旁注,tr最好删除[,]字符:

要将:替换为\t,还可以使用tr:

证明:

$ echo '[lib:Library10] [idx:10] [Fragment] [75] [color]'| sed 's/[][]//g; s/:\|\s\+/\t/g'
lib Library10   idx 10  Fragment    75  color
$ echo '[lib:Library10] [idx:10] [Fragment] [75] [color]'| sed 's/[][]//g; s/:\|\s\+/\t/g' | od -c
0000000   l   i   b  \t   L   i   b   r   a   r   y   1   0  \t   i   d
0000020   x  \t   1   0  \t   F   r   a   g   m   e   n   t  \t   7   5
0000040  \t   c   o   l   o   r  \n
0000047
如果要在字符类中放置右括号,它必须是第一个字符,因此[][]将匹配左括号或右括号

证明:

$ echo '[lib:Library10] [idx:10] [Fragment] [75] [color]'| sed 's/[][]//g; s/:\|\s\+/\t/g'
lib Library10   idx 10  Fragment    75  color
$ echo '[lib:Library10] [idx:10] [Fragment] [75] [color]'| sed 's/[][]//g; s/:\|\s\+/\t/g' | od -c
0000000   l   i   b  \t   L   i   b   r   a   r   y   1   0  \t   i   d
0000020   x  \t   1   0  \t   F   r   a   g   m   e   n   t  \t   7   5
0000040  \t   c   o   l   o   r  \n
0000047

如果要在字符类中放置右括号,它必须是第一个字符,因此[][]将匹配左括号或右括号。

将它们放在sed脚本中此部分不需要太长:-e's/\]//g'-e's/\[//g'-e's/\s\+/\t/g'-e's/\://\t/'。我只想知道如何使用更好的sed语法使它更紧凑。sed是事务性的,因此一个sed statemnet与所有unix实用程序一样只执行一个例程。因此,如果需要sed执行很多事情,您可以选择将其管道化或放在sed脚本中,将它们放在sed脚本中,这部分是不必要的ng:-e's/\]//g'-e's/\[//g'-e's/\s\+/\t/g'-e's/\://\t/'。我只想知道如何使用更好的sed语法使它更紧凑。sed是事务性的,因此一个sed statemnet会像所有unix实用程序一样执行一个例程。因此,如果您需要sed做很多事情,您可以选择将其管道化或放入sed脚本中。哦,非常好,我不知道sed'something;其他事物的可能性。这绝对是一个公认的答案。我只是想知道这里的方括号转义技巧是怎么回事:[]。看起来好像是两对方括号,但sed设法理解了其意图。哦,很好的一个,我不知道sed“某物;其他东西”的可能性。这绝对是一个公认的答案。我只是想知道方括号转义技巧在这里发生了什么:[][]。看起来好像是两对方括号,但sed理解了意图。感谢详细解释。我在转义[和]字符并将其放入字符类时遇到问题。感谢详细解释。我在转义[和]字符并将其放入字符类时遇到问题。