使用Linux,我需要一种用下划线替换字符串中的空格的方法。特殊之处是只能在两个字母之间进行此操作(无论大小写如何)。不能在两个数字或一个数字和一个字母之间。

例:

"This is a test File of 100 MB Size - 45 of 50 files processed"

输出应为:

"This_is_a_test_File_of 100 MB_Size - 45 of 50 files_processed"

在此先感谢您的帮助。

我尝试了很多sed regex组合,但没有一个能胜任。 似乎有些棘手。

sed 's/\([a-z]\)[[:space:]]\([A-Z]\)/_/g'
sed 's/\([a-z]\) \([A-Z]\)/_/g'
分析解答

一种将连字号放在数字周围并与单词边界一起使用的方法:

sed -E 's/([0-9_])/-\1-/g;s/\b \b/_/g;s/-([0-9_])-/\1/g' file

或更直接地使用perl:

perl -pe's/\pL\K (?=\pL)/_/g' file