我有一行文字,如:
value,value,,,value,value
我希望用不同的值替换这两个空值。类似的东西:
value,value,hello,hello,value,value
我正在尝试类似的事情:
sed -e 's/^,/hello,/' -e 's/,$/,hello/' -e 's/,,/,hello,/g'
在开头,结尾和中间捕获空白值。但是,它不会连续捕获两个连续的空白值。如何更新正则表达式模式,以便在中间出现无限数量的连续空白值?
答案 0 :(得分:4)
这个perl单行怎么样:
echo ',value,,,value,' | perl -pe 's/^(?=,)|(?<=,)(?=,|$)/hello/g'
# hello,value,hello,hello,value,hello
答案 1 :(得分:2)
我认为你不能用一个替换命令来做,因为Sed只替换你的模式的非重叠事件。这个丑陋的黑客可以工作,但要求你在你的价值观中阻止另外一个角色(我选择';'):
$ echo 'value,value,,,value,value' | sed -r 's/,/,;/g;s/(^|;)(,|$)/\1hello\2/g;s/,;/,/g'
value,value,hello,hello,value,value
答案 2 :(得分:1)
其他perl单行:
perl -we '$_=<>; while(s/,,/,hello,/) {}; print;' value.txt
perl -we 'print join ",", map { $_ || 'hello' } split /,/, <>;' value.txt