【发布时间】:2022-01-10 07:51:31
【问题描述】:
我的目标是在各种缩写的字母之间添加空格。
缩写的三个条件:
- 缩写至少包含两个或多个字母。
- 缩写总是大写。
- 特殊字符“/”被认为是大写字母
想想 DNS、IP、TCP/IP 等。
我想对它们进行文本处理以变成:
D N S
I P
T C P / I P
等等。 假设我有这句话
因为 IP 提供了这种基本的路由功能,所以经常使用术语“IP 路由器”。路由器的其他旧术语是(IP 网关)、[Internet 网关] 和“网关”。 TCP/IP 12345。
运行这个命令有点解决我的问题:sed -e "s/[a-z \, \. \' \“ \” \( \) 0-9]*/& /g" -e "s/ */ /g" test.txt
它不是很完美。
我明白了:
因为IP提供了这个基本的路由功能,所以经常使用术语“IP路由器”。路由器的其他旧术语是(IP 网关)、[Internet 网关] 和“网关”。 T C P / I P 12345。
" 和 I P 之间还有一个空格。
( 和 I P 之间有一个空格。
[ 和 Internet 之间也有一个空格。
使用$ sed -e "s/[a-z \, \. \' \“ \” \( \) \[ \] 0-9]*/& /g" -e "s/ */ /g" test.txt 转义 [ 和 ] 不起作用,如下所示。
因为 IP 提供了这种基本的路由功能,所以经常使用术语“IP 路由器”。路由器的其他旧术语是(IP 网关)、[Internet 网关] 和“网关”。 TCP/IP 12345。
【问题讨论】:
-
@CarySwoveland 唯一适用的特殊规则是“/”是唯一应该被视为大写字母的特殊字符。其他特殊字符不适用。