bash 中的 sed 使用变量和双引号会导致未终止的错误

bash 中的 sed 使用变量和双引号会导致未终止的错误

我有以下代码,并且不断收到unterminated error.例如,$1可以ABC-TXT-123并且我想TEXT abc.123在文件中替换为ABC-TXT-123.

#!/bin/bash
id=$1
if [[ $id =~ .*TXT.* ]]; then
    sed -i "s/TEXT abc.*/TEXT $id/" someDataFile
fi

答案1

它与以下命令配合得很好:

$ cat > test
asd asd asd asd
asd TEXT abc.123 asd
asd asd asd asd

$ var='ABC-TXT-123'
$ sed -i "s/TEXT abc.*/TEXT $var/" test

$ cat test
asd asd asd asd asd
asd TEXT ABC-TXT-123
asd asd asd asd asd

也许您也可以向我们提供该文件的片段......

答案2

在 OSX 上,我必须添加一个额外的内容''才能使其工作:

#!/bin/bash
id=$1
if [[ $id =~ .*TXT.* ]]; then
    sed -i '' 's/TEXT abc.*/TEXT '$id'/' someDataFile
fi

这意味着 someDataFile 的内容从“TEXT abc.123”变为“TEXT ABC-TXT-123”。但您的描述要求略有不同,因此您可能需要:

    sed -i '' 's/TEXT abc.*/'$id'/' someDataFile

相反,要替换整行,而不是将“TEXT”一词放回...

相关内容