使用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