0

如何编写一个 sed 表达式,它通过一行查找匹配

Id int

并更改为

Id string

这将是该行中的唯一内容(仅是 Id int)并且不应更改其他行。

我尝试了一些类似的东西

find . -type f -print0 | xargs -0  sed -i '' 's~^\([[:space:]]*\)"Id"[[:space:]]*"int"[:space:]]*$~\1"Id string"~g'

但是 reg exp 是错误的。

谢谢。

编辑:

进一步澄清:在 、和Id之间有空格(不一致)。因此,需要匹配 [[:space:]]* ,而不是制表符或表达式Idints/^Id int$

所以要匹配的行可以是

   Id int
Id   int
  Id      int

它可以替换为

Id string
Id string
Id string

意味着,无需保留空格数

4

2 回答 2

0

使用 awk 更容易:

awk '$2=="int"{$2="string"}1'

并且可能更容易根据您的实际需求进行调整。

于 2013-11-05T04:26:13.157 回答
0

我相信以下内容会满足您的要求:

sed 's/^Id int$/Id string'

^表示行首,表示$,因此我们将更改限制为仅包含Id int行而不包含行的行I like Id int

更新以下 OP 说明:

如果你想匹配有不同空格的情况,并保留这个空格,那么你可以使用:

sed 's/^\([[:space:]]*\)Id\([[:space:]]+\)int\([[:space:]]*\)$/\1Id\2string\3/'

这将保留之前Id、之间Idint之后的空白int。如果您不想保留单词之间或最后一个单词之后的空格,请删除组匹配参数\2\3sed表达式中删除。

于 2013-11-05T03:42:06.313 回答