使用SED中的变量进行模式匹配

时间:2013-11-22 23:37:00

标签: sed

考虑以下代码:

pattern="*.some_pattern.*"
orignalLogFile='sample.log'
outputFile='1.txt'
temp='1.log'

# match the pattern and replace with a new line
sed 's/'$pattern'/\n/' $orignalLogFile > $temp

抛出一个

  

'sed:-e表达式#1,字符9:未终止的's'命令'

如何解决此问题?

2 个答案:

答案 0 :(得分:1)

Sed不接受换行符。 AFAIK也不接受明星;但我认为你不需要使用它们。

pattern="some_pattern"
orignalLogFile='sample.log'
outputFile='1.txt'

read -r < "${originalLogFile}"

echo "${REPLY}" | sed s"@${pattern}@newline@" > newlog.tmp

read newlog < newlog.tmp

echo "${newlog}" | tr 'newline' '\n' > "${outputFile}"
rm newlog.tmp

答案 1 :(得分:1)

您可能需要两次更正

你的模式中的*.没有意义,所以

pattern=".*some_pattern.*"

此外,您需要以双引号传递模式以保护它免受shell扩展

sed 's/'"$pattern"'/\n/' file