【发布时间】:2013-11-05 12:26:13
【问题描述】:
如何编写一个 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'
但是正则表达式是错误的。
谢谢。
编辑:
进一步澄清:
Id 之前,Id 和 int 之间有空格(不一致)。因此,需要匹配 [[:space:]]* ,而不是制表符或表达式,如 s/^Id int$
所以要匹配的行可以是
Id int
Id int
Id int
可以换成
Id string
Id string
Id string
表示,不需要保留空格数
【问题讨论】:
-
为什么这不起作用?
sed -i 's/^[ \t]*Id[ \t][ \t]*int[ \t]*$/Id string/' -
@JerryJeremiah 添加了一些说明。谢谢
-
“Id”是字面意义上的两个字符“Id”,还是您需要在替换中保留的一些未知标识符?
-
Id 只是 2 个字符
Id,不是标识符。 -
@bsr 我发布的解决方案运行良好。