我试图仅在字母之间插入空格,而不是在数字或其他字符之间插入空格。
hello woRLd 12ab34
应该成为h e l l o w o R L d 12a b34
sed 's/\([a-zA-Z]\)\([a-zA-Z]\)/\1 \2/g' file.txt
结果是h el lo w or LD 12a b34
我无法在每个字母后面插入空格,因为这不会检查后面的字母是否也是字母。
我可以运行该sed
命令两次,这解决了问题,但并不优雅。如果可能的话,我需要使用 来解决这个问题sed
。
答案1
您可以使用循环+条件分支来完成:
$ echo "hello woRLd 12ab34" | sed '
:a
s/\([a-zA-Z]\)\([a-zA-Z]\)/\1 \2/
ta
'
h e l l o w o R L d 12a b34
或者更紧凑
$ echo "hello woRLd 12ab34" | sed -e :a -e 's/\([a-zA-Z]\)\([a-zA-Z]\)/\1 \2/' -e ta
h e l l o w o R L d 12a b34
答案2
您不需要运行该命令两次,只需在脚本中运行 ubstitute 命令两次sed
即可。有一个优雅的方法来做到这一点:空模式重复前面的模式:s
sed
sed
//
sed 's/\([a-zA-Z]\)\([a-zA-Z]\)/\1 \2/g;s//\1 \2/g' file.txt
为了可读性,我建议使用扩展正则表达式:
sed -E 's/([a-zA-Z])([a-zA-Z])/\1 \2/g;s//\1 \2/g' file.txt