无法使用'*'来搜索/替换 - sed

时间:2013-12-15 21:12:16

标签: sed

我想将所有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

我最初没有在句号之前使用反斜杠,但是,一旦它不起作用,我想也许时期很棘手。

但是,它似乎没有取代任何东西。出了什么问题?

谢谢!

2 个答案:

答案 0 :(得分:3)

使用*作为通配符对于通配符是正确的,但如果您使用则不行,这是使用时的情况。而不是*,请尝试.*

中,*表示任意次数匹配前一个字符。通配符是.,因此.*匹配任意数量的任何字符。

如果您知道要匹配的字符始终是数字,则使用[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
#                        ˆ