Léo*_* 준영 4 sed text-processing
伪代码是这个答案的延续
gsed 's/|/1)/g' 's/|/2)/2g' 's/|/3)/3g' 's/|/5)/4g' 's/|/5)/5g'
<input.csv >output.csv
Run Code Online (Sandbox Code Playgroud)
这当然不起作用。我对如何gsed
管理这样的循环感兴趣。
如何gsed
扩展到这样的循环?
对于上述情况,您可以这样做:
gsed 's/|/1)/; s/|/2)/; s/|/3)/; s/|/4)/; s/|/5)/'
Run Code Online (Sandbox Code Playgroud)
例子:
$ echo '| | | | |' | sed 's/|/1)/; s/|/2)/; s/|/3)/; s/|/4)/; s/|/5)/'
1) 2) 3) 4) 5)
Run Code Online (Sandbox Code Playgroud)
如果您可以提前估计|
一行的最大数量,并相应地添加s/|/N)/
,则此方法有效。
如果您无法估计|
一条线上的最大数量,它仍然可以gsed
使用保持缓冲区中的计数器来完成,并使用这个聪明的设备增加它Bruno Haible 的。不过,实际的实现有点棘手,因此我将把它留给受虐狂精明的读者。
当然,最简单的方法是使用awk
:
awk '{ cnt = 0; while(sub(/\|/, ++cnt ")")); print }'
Run Code Online (Sandbox Code Playgroud)
证明:
$ echo '| | | | |' | awk '{ cnt = 0; while(sub(/\|/, ++cnt ")")); print }'
1) 2) 3) 4) 5)
Run Code Online (Sandbox Code Playgroud)