linux 为什么我的sed命令可以单独使用,但在shell脚本中却不能?

rn0zuynd  于 2023-01-20  发布在  Linux
关注(0)|答案(1)|浏览(342)

这是我在Stackoverflow上的第一篇文章。我在脚本中执行sed命令时遇到了一个问题,而同一个命令可以单独正常工作。
脚本:

#!/bin/bash

filename=file
sensitive="censored"

while IFS=  read -r line; do
        if [[ $line == *"Memory Region Size"* ]];
        then
                server_name=$(echo "$line" | awk '{print $11}')
                echo "$line"  >> test
        elif [[ $(echo "$line" | wc -w) == 4 ]];
        then
                echo "$line" | awk '$4="censored"' >> test
        else
                echo "$line" >> test
        fi
done < $filename

sed -i "s/${server_name}/${sensitive}/g" test
echo $server_name
echo $sensitive

我想用"censored"替换server_name来审查文件。这是我正在使用的输出:

$ ./log_censor.sh 
sed: -e expression #1, char 36: unterminated `s' command
ABC-123 
censored

同样的命令,它的一行命令对我来说工作得很好:

$ cat file1
My server is ABC-123

$ server_name="ABC-123";sensitive="censored";sed -i "s/${server_name}/${sensitive}/g" file1

$ cat file1
My server is censored

我很感激你的帮助。谢谢

dgenwo3n

dgenwo3n1#

混合bash、awk和sed似乎没有必要,用一种语言就可以了,比如awk。

# usage: awk -f this_script.awk file file > test

BEGIN {sensitive = "censored"}

NR == FNR && /Memory Region Size/ {server_name = $11}
NR == FNR {next}

NF == 4 {$4 = sensitive}
{
    gsub(server_name, sensitive)
    print
}

相关问题