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