当脚本在搜索模式后添加行时,请帮助解决空格问题
$ cat test.txt
test server:1
prod server 1
$ cat ./check.sh
#!/bin/bash
#
search=" test server:1"
add=" test server:1000"
echo "starting"
sed -e "/${search}/a${add}" ./test.txt
$ ./check.sh
starting
test server:1
test server:1000
prod server 1
test server:1000 之前的空格丢失了。我该如何修复这个问题?
答案1
你所看到的是 GNU 扩展命令之间的细微差别
a text
在行后附加文本。这是标准 a 命令的 GNU 扩展 - 详情请参阅下文。
其中手册指出
a 命令后的前导空格将被忽略。
以及更便携的原始形式
a\ text
不会删除前导空格。有几种方法可以在“一行”代码中实现后者的行为,例如
$ sed "/${search}/a\\${add}" ./test.txt
test server:1
test server:1000
prod server 1
(注意\
需要在双引号内进行转义)或
$ sed "/${search}/a"'\'"${add}" ./test.txt
test server:1
test server:1000
prod server 1
或者
$ sed -e "/${search}/a\\" -e "${add}" ./test.txt
test server:1
test server:1000
prod server 1
(但请注意,最后一个依赖于另一个 GNU 扩展-e
)。
答案2
您需要转义空格,否则sed
将会忽略它,因为/pattern/atext
和/pattern/a text
和的/pattern/a text
解释相同。
用这个:
sed -e "/${search}/a${add// /\\ }" ./test.txt