sed 抛出 sed: -e 表达式 #(number), char (number): 未知命令: `(letter)'

sed 抛出 sed: -e 表达式 #(number), char (number): 未知命令: `(letter)'

我编写了一个 shell 脚本,它读取一些文件并将这些文件中的所有数据复制到其他合并文件中。

这种情况会发生多次,之前复制的数据将不会再次复制。为此,我将最后复制的行保存在一个单独的文件中,并从第二次开始进行比较。

逻辑流程:

  • 第一次,读取单个文件并将除最后一行之外的整个数据复制到合并文件中。将最后复制的行保存到临时文件中。

sed '$d' $file >> $consolidatedCSVFile

tail -2 $file | head -1 > $consolidatedCSVFile$lastLines/$(basename $file)$lastLine

  • 从第二次开始,从临时文件中读取最后一行并在单个文件中搜索该行。找到后,取出下一行中的所有行并附加到合并文件中。

完整脚本:

#!/bin/bash

consolidatedCSVFile=$1
endTime=$2

curdate=$(date +%s)

CSVFiles=${@:3}
CSVFiles=${CSVFiles[@]}

lastLines=_LASTLINES
lastLine=_LASTLINE

newMerge=false

# Returns 1 if Consolidated file is empty
[ -s $consolidatedCSVFile  ]
if [ $? == 1  ]
    then
        mkdir $consolidatedCSVFile$lastLines
        newMerge=true
fi

testInProcess=false

if [ $endTime -ge $curdate  ]
    then
        testInProcess=true
fi

for file in $CSVFiles
do
if $newMerge ;
    then
        touch $consolidatedCSVFile$1astLines5(basename $file)$lastLine
        sed $d $file >> $consolidatedCSVFile
        tail -2 $file | head -1 >   $consolidatedCSVFile$1astLines5(basename $file)$lastLine
    else
        availableLastLine="`cat $consolidatedCSVFile$1astLines/$(basename $file)$lastLine`"
        if $testInProcess
            then
                sed '1,/^'"$availableLastLine"'$/d' $file | sed '$d' >> $consolidatedCSVFile
                tail -2 $file | head -1 > $consolidatedCSVFile$1astLines5(basename $file)$lastLine
            else
                sed '1,/^'"$availableLastLine"'$/d' $file >> $consolidatedCSVFile
        fi
fi

done

if  !  $testInProcess ;
then
    rm -rf $consolidatedCSVFile$lastLines
fi

有时,我会收到错误消息sed: -e expression #1, char 26: unknown command: 'X'

我猜

我正在尝试合并 JMeter 生成的文件。有时,这些文件会生成类似的数据1439459065780,5,SOAP/XML-RPC Request,200,OK,ws test 1-3,text,true,267,3,3,5

我认为问题出sed '1,/^'"$availableLastLine"'$/d' $file | sed '$d' >> $consolidatedCSVFileSOAP/XML。斜杠(/)在这里可能会出现问题。

答案1

availableLastLine 修改为后工作availableLastLine=$(sed 's/\//\\\//' $consolidatedCSVFile$lastLines/$(basename $file)$lastLine)

相关内容