regex - 如何在Linux中仅用字母之间的下划线替换空格,忽略数字

标签 regex linux bash sed replace

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

相关文章:

java - 在 GWT 正则表达式中使用捕获组

regex - 如何在 Sublime 中替换两个字符之间的字符串

c - 如何列出所有用户和他们活跃的进程数

python - Linux 中的桌面图标

linux - 对文本文件中的每一行进行排序

linux - bash 脚本中的 "var = $(<filename)"未分配文件内容

Java Regex - 掩码信用卡号

linux - 如何确保压力测试的结果准确?

php - 为 Apache 而不是 CLI 启用 PHP 扩展

python - 正则表达式匹配Python中的重复组