繁体   English   中英

为什么我的 sed 命令单独运行,但在 shell 脚本中却不起作用?

[英]Why my sed command works separetly but doesn't in shell script?

这是我在 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 来审查文件。 这是 output 我正在接:

$ ./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

我感谢任何帮助。 谢谢

混合 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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM