我有一个从" .properties"中获取价值的脚本。文件。如果它是一个简单的字符串,它会成功替换该值,但如果包含像(' \')这样的转义字符,则它不起作用。任何人都可以指出该做什么,我在互联网上搜索但无法理解" REGEX"。
脚本文件:
#!/bin/bash
# Omer's First Script
#Include Properties File
. directoryPaths.properties
echo "Start"
sed -i "s/DONEDIRECTORY/$DoneDirectory/" *TestFile*
echo "finish"
directoryPaths.properties
DoneDirectory=/home/omerkhalid/Documents/Test/Done
TESTFILE.TXT
这是一份测试文件。
DONEDIRECTORY
错误:
sed: -e expression #1, char 18: unknown option to `s'
注意: 如果我改变" DoneDirectory"的值简单的字符串,即"完成" ,它工作正常。但是" /"逃避角色它不起作用。
答案 0 :(得分:5)
问题不是使用sed命令,而是使用变量$DoneDirectory
的内容。
在sed命令中
sed -i "s/DONEDIRECTORY/$DoneDirectory/" *TestFile*
/
用作分隔符,sed
期望s
命令后只有3个斜杠。但是,一旦变量$DoneDirectory
被替换,就会有8 /
给出错误
<强>解决方案强>
使用sed
中的其他一些分隔符
sed -i "s#DONEDIRECTORY#$DoneDirectory#" *TestFile*
答案 1 :(得分:2)
由于变量$DoneDirectory
包含sed的默认命令分隔符/
,我会使用不同的分隔符:
sed -i "s#DONEDIRECTORY#$DoneDirectory#" *TestFile*
答案 2 :(得分:1)
我认为sed不适合这项工作。当然,你可以使用其他分隔符,但如果其他分隔符出现在你的字符串中(或反斜杠,或其他sed解释的东西),它仍然会爆炸。我相信awk更适合:
awk -v subst="$DoneDirectory" '{ sub("DONEDIRECTORY", subst); print $0 }' TestFile
注意:如果gsub
在一行中显示多次,则应使用sub
代替DONEDIRECTORY
,然后应替换它们。