当字符串中有空格时,sed find and replace失败

当字符串中有空格时,sed find and replace失败,sed,Sed,我有一个sample.txt文件,内容如下: test sometest test2 againsometext 我的shell脚本使用sed查找包含“test”的行,并将整行替换为“test google.com::100 ws sample.com::sample”。sed因“unterminated`s'命令”而失败 我在其他地方也有同样的脚本,替换文本没有空格,而且效果很好 有人能提出一些想法试试吗 TIA假设bash在您的环境中可用,它将只是 足以说明: #!/bin/bash t

我有一个sample.txt文件,内容如下:

test sometest
test2 againsometext
我的shell脚本使用sed查找包含“test”的行,并将整行替换为“test google.com::100 ws sample.com::sample”。sed因“unterminated`s'命令”而失败

我在其他地方也有同样的脚本,替换文本没有空格,而且效果很好

有人能提出一些想法试试吗


TIA

假设
bash
在您的环境中可用,它将只是 足以说明:

#!/bin/bash

test1="test"
test2="google.com::100-ws sample.com::GOLD-W"

sed -i "s/^$test1.*/$test1 $test2/" sample.txt
  • 您需要引用包含空白字符的字符串,以防止分词
  • 对普通变量名使用大写字母不是一个好的做法
  • 您需要使用双引号而不是单引号来启用变量扩展 指向sed的命令

假设在您的环境中有可用的
bash
,它将只是 足以说明:

#!/bin/bash

test1="test"
test2="google.com::100-ws sample.com::GOLD-W"

sed -i "s/^$test1.*/$test1 $test2/" sample.txt
  • 您需要引用包含空白字符的字符串,以防止分词
  • 对普通变量名使用大写字母不是一个好的做法
  • 您需要使用双引号而不是单引号来启用变量扩展 指向sed的命令

测试和味精之间的空间很重要。否则,您将删除以test开头的每一行。此外,您还可以反向引用捕获的组
\(test\)

#/bin/bash
replace=“google.com::100 ws-sample.com::GOLD-W”
sed-i“s/^\(test\)./\1$replace/”sample.txt

测试和消息之间的间隔很重要。否则,您将删除以test开头的每一行。此外,您还可以反向引用捕获的组
\(test\)

#/bin/bash
replace=“google.com::100 ws-sample.com::GOLD-W”
sed-i“s/^\(test\)./\1$replace/”sample.txt

sh
()通常不是
bash
()。请首先在粘贴脚本,并尝试实现此处提出的建议。为什么在
$TEST2
周围有这些单引号?您希望输出是什么样子?这是否回答了您的问题?简而言之,
if grep-q“$TEST1”sample.txt;然后sed-i“s/^$TEST1.*\$/$TEST1$TEST2/”sample.txt
(另请注意)
sh
()通常不是
bash
()。请首先粘贴脚本并尝试实现那里提出的建议。为什么
$TEST2
周围有这些单引号?您希望输出是什么样子?这是否回答了您的问题?简而言之,
if grep-q“$TEST1”sample.txt;然后sed-i“s/^$TEST1.*\$/$TEST1$TEST2/”sample.txt
(另请注意)这是有效的。非常感谢。我使用大写,因为它们实际上是env变量。我改了名字,因为我不能分享真名。谢谢你的反馈。我明白你为什么选择大写变量名了。这很有效。非常感谢。我使用大写,因为它们实际上是env变量。我改了名字,因为我不能分享真名。谢谢你的反馈。我明白你为什么选择大写变量名了。谢谢你的回复。谢谢你!谢谢你的回复。谢谢你!