【发布时间】:2020-12-02 01:04:42
【问题描述】:
我有一个 sample.txt 文件,内容如下:
test sometest
test2 againsometext
我的 shell 脚本使用 sed 查找包含“test”的行并将整行替换为“test google.com::100-ws sample.com::SAMPLE”。 sed 因“未终止的 `s' 命令”而失败。
#!/bin/sh
TEST1=test
TEST2=google.com::100-ws sample.com::GOLD-WS
echo $TEST1
echo $TEST2
if [[ ! -e sample.txt ]]; then
touch sample.txt
echo $TEST1 $TEST2 >> sample.txt
else
grep -q $TEST1 sample.txt
if [ $? -eq 0 ];then
sed -i 's/^$TEST1 .*$/$TEST1 '$TEST2'/' sample.txt
else
echo $TEST1 $TEST2 >> sample.txt
fi
fi
我在替换文本没有任何空格的其他地方也有同样的脚本,它工作正常。
有人可以提出一些想法来尝试吗?
TIA
【问题讨论】:
-
sh(Bourne-shell) 通常不是bash(Bourne-again shell)。 -
请先将您的脚本粘贴到shellcheck.net,然后尝试实施那里提出的建议。
-
为什么
$TEST2周围有那些单引号?您希望输出是什么样的? -
这能回答你的问题吗? When to wrap quotes around a shell variable? 简而言之,
if grep -q "$TEST1" sample.txt; then sed -i "s/^$TEST1 .*\$/$TEST1 $TEST2/" sample.txt(另请注意 Why is testing “$?” to see if a command succeeded or not, an anti-pattern?)
标签: sed