sed 搜索字符串中的空格

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:]]。但对于某些我无法使其发挥作用的方式。

fed*_*qui 5

我认为你的表达太复杂了。这应该足够了:

sed 's/^#[[:space:]]*-[[:space:]]*"server1".*/ChangedWord/' file
Run Code Online (Sandbox Code Playgroud)

它查找#以 0 到 n 个空格开头的行,然后"server1"是任何内容。在这种情况下,它将将该行替换为ChangedWord

注意我使用[[:space:]]来匹配空格,因为这是一种更兼容的方式(感谢评论中的 Tom Fenech)。

另请注意,无需gsed表达式中使用,因为该模式每行只能出现一次。

测试

$ cat a
hello
#     - "server1"
hello#     - "server1"
$ sed 's/^#[[:space:]]*-[[:space:]]*"server1".*/ChangedWord/' a
hello
ChangedWord
hello#     - "server1"
Run Code Online (Sandbox Code Playgroud)