我有一个名为.ignore
.需要更换projdir
.例如:
ignore \..*
ignore README
projdir Snake
我需要将 Snake 替换为“PacMan”等。我阅读了手册页,但我不知道该怎么做。
答案1
搜索以 开头的行projdir
,并将整行替换为新行:
sed -i 's/^projdir .*$/projdir PacMan/' .ignore
^
和$
是行开始/结束标记,因此模式将匹配整行;.*
匹配任何东西。告诉-i
将sed
更改直接写入.ignore
,而不是仅仅输出它们
答案2
一种方法是重写整行,对要保留的部分使用反向引用:
sed -e 's/^\( *projdir *\)[^ ]*\(.*\)*$/\1PacMan\2/'
另一种方法是重写该行的该部分,但前提是其他部分匹配:
sed -e '/^ *projdir / s/ [^# ]/ PacMan/'
这两个示例都在第一个单词为 的行上重写第二个空格分隔的单词projdir
。
答案3
尽管这是一篇旧帖子,并且似乎已通过接受的答案为您解决了问题,但实际问题尚未得到解答。因此,为了完整性并帮助他人:
这里的答案实际上与“Snake”匹配,而不是与以“projdir”开头的行匹配......
sed -r 's/(^.*)Snake/\1PacMan' .ignore
这将从行开头开始的所有内容(包括“Snake”)替换为“Snake”+“PacMan”之前的所有内容。 \1 代表()内匹配的内容。 《蛇》之后的一切都保持不变。