我想替换单词开头的引号。
例如:
$ echo "a 'line' a single ' after a 'keyword' with a few space's for a program"\
| sed "s/\b'/X/g"
a 'lineX a single ' after a 'keywordX with a few spaceXs for a program
Run Code Online (Sandbox Code Playgroud)
但是正如您所看到的,它们在单词的末尾而不是开头被替换。
如何替换以单词开头的那些?
Joh*_*024 15
这'
在单词开头替换:
$ echo "a 'line' a single ' after a 'keyword' with a few space's for a program"| sed "s/'\b/X/g"
a Xline' a single ' after a Xkeyword' with a few spaceXs for a program
Run Code Online (Sandbox Code Playgroud)
对于人类而不是计算机,这里有一个特殊性:计算机将其space's
视为两个单词并替换 the,'
因为它位于第二个单词的开头。
\b
标记单词边界,开始或结束。现在考虑\b'
。这匹配一个单词边界,后跟一个'
。既然'
是不是一个单词字符,这意味着单词的末尾必须先于'
相匹配。要用于\b
匹配单词的开头,请颠倒顺序:'\b
。同样,由于'
不是单词字符,因此只有在'
.
一些 sed,如 GNU sed,支持\<
匹配单词的开头。这对您的情况没有帮助,因为'
它已经不是单词字符并且会导致问题。
如果您不想'
替换 inspace's
因为'
出现在单词的末尾,您可以使用\B
以下方法反转逻辑:
$ echo "a 'line' a single ' after a 'keyword' with a few space's for a program"| sed "s/\B'/X/g"
a Xline' a single X after a Xkeyword' with a few space's for a program
Run Code Online (Sandbox Code Playgroud)
\B
匹配不是单词边界。因此\B'
匹配'
(space-quote) 因为空格和引号都不是单词字符。它不匹配,space'
因为e'
是一个词边界:e
是一个词字符而'
不是。
归档时间: |
|
查看次数: |
20973 次 |
最近记录: |