Bra*_*ave 0 regex bash shell sed
我想替换文件中的字符串:
# - "server1"
Run Code Online (Sandbox Code Playgroud)
我的第一次尝试是这样的:
sed -i 's/#\ -\ "\server1"\.*/ChangedWord/g' file
Run Code Online (Sandbox Code Playgroud)
但如果我这样尝试,就会出现错误。
所以必须有另一种方法来处理空格,我想我必须使用 \s 或 [[:space:]]。但对于某些我无法使其发挥作用的方式。
我认为你的表达太复杂了。这应该足够了:
sed 's/^#[[:space:]]*-[[:space:]]*"server1".*/ChangedWord/' file
Run Code Online (Sandbox Code Playgroud)
它查找#以 0 到 n 个空格开头的行,然后"server1"是任何内容。在这种情况下,它将将该行替换为ChangedWord。
注意我使用[[:space:]]来匹配空格,因为这是一种更兼容的方式(感谢评论中的 Tom Fenech)。
另请注意,无需g在sed表达式中使用,因为该模式每行只能出现一次。
$ cat a
hello
# - "server1"
hello# - "server1"
$ sed 's/^#[[:space:]]*-[[:space:]]*"server1".*/ChangedWord/' a
hello
ChangedWord
hello# - "server1"
Run Code Online (Sandbox Code Playgroud)