使用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 正则表达式组合,但没有一个能完成这项工作。 看起来有点棘手。
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
关于regex - 如何在Linux中仅用字母之间的下划线替换空格,忽略数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57187056/