[英]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.