如何编写一个sed表达式,它通过一行来匹配
Id int
并改为
Id string
这将是该行中唯一的内容(除了Id之外),不应该改变其他行。
我尝试了一些事情
find . -type f -print0 | xargs -0 sed -i '' 's~^\([[:space:]]*\)"Id"[[:space:]]*"int"[:space:]]*$~\1"Id string"~g'
但是reg exp错了。
感谢。
进一步澄清:
在Id
之前,Id
和int
之间存在空格(不一致)。因此,需要匹配[[:space:]] *,而不是像s/^Id int$
所以匹配的行可以是
Id int
Id int
Id int
可以替换为
Id string
Id string
Id string
表示无需保留空格数
答案 0 :(得分: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
之前,Id
和int
之间以及int
之后的空白。如果您不想保留单词之间或最后一个单词之后的空格,请从\2
期限中删除组匹配参数\3
和sed
。
答案 1 :(得分:0)
使用awk更容易:
awk '$2=="int"{$2="string"}1'
可能更容易调整您的实际需求。