这是我试图找出的一些正则表达式的示例。目标是去除多余的空格,并通过 sed 使其在单词之间只有一个空格。给出的示例在sdf 和sdk 之间有三个空格:
test@ubuntu:~/addr_book_script$ echo "est sdf sdk" | sed 's/ */ /g'
est sdf sdk
test@ubuntu:~/addr_book_script$ echo "est sdf sdk" | sed 's/ */ /g'
e s t s d f s d k
您会注意到两个 sed
语句的不同之处仅在于 * 之前的空格数。第一个语句有两个空格,它的行为正是我想要的。
第二个语句在 * 之前有一个空格,它在每个字母和单词之间留了一个空格。
我知道 * 表示我正在寻找的任何次数。我不明白的是为什么一个空格 sed replace 的行为方式如此。
谢谢
最佳答案
sed 's/ */ /g'
正则表达式 *
匹配 0 次或多次出现的 (空格)。
- 在字符串的开头找到一个 0 空格匹配项并替换为单个空格
- 在第一个字母之后找到另一个 0 空格匹配项并替换为单个空格等等。
est
后,发现多于0个空格,替换为单个空格
等等。
另一个例子:
~ >>> echo "est sdf sdk" | sed 's/a*/ /g'
e s t s d f s d k
替换是因为0个字符匹配。
关于bash - 为什么正则表达式中少一个空格会使我的 sed 变得奇怪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37234817/