我想将所有a.b.c.top * .gz提到new-word / new-table。
像 - >
es.fr.en.top20.gz 成为 binarised-model / phrase-table
我这样做了:
sed -i 's/es\.fr\.en\.top*\.gz/binarised-model\/phrase-table/g' top*/mert-work/moses.ini
我最初没有在句号之前使用反斜杠,但是,一旦它不起作用,我想也许时期很棘手。
但是,它似乎没有取代任何东西。出了什么问题?
谢谢!
答案 0 :(得分:3)
使用*
作为通配符对于bash通配符是正确的,但如果您使用regex则不行,这是使用sed时的情况。而不是*
,请尝试.*
。
在regex中,*
表示任意次数匹配前一个字符。通配符是.
,因此.*
匹配任意数量的任何字符。
如果您知道要匹配的字符始终是数字,则使用[0-9]*
会更安全。如果您甚至知道这个号码有多少个字符,那么您甚至可以使用例如[0-9]\{2\}
恰好匹配两个数字。
答案 1 :(得分:3)
Sed使用正则表达式,而不是shell globbing。这意味着(1).
匹配除换行符之外的任何单个字符,因此您可以将它们转义为匹配文字点,并且(2)*
匹配前面的一个或多个令牌,这是p
。你需要
sed -i 's/es\.fr\.en\.top.*\.gz/binarised-model\/phrase-table/g' top*/mert-work/moses.ini
# ˆ