如何解决执行 shell 脚本以检查每一行中特定位置的特定字符时出错,如果找到,则将其替换为“X”
我有这个 shell 脚本。在这个脚本中,我试图在每一行的特定位置找到一个字符,如果在该位置找到字符,则将其替换为“X”
filename = "/ray/test/raymond/test2.data"
if [ -r $filename ]; then
echo " File Found..."
echo " "
fi
cat $filename |
while read line
do
var = `echo $line | awk '{print substr($0,422,1)}'`
if [ "$var" = "D" ]; then
`echo $line | awk '{start = substr ($0,1,421); end = substr ($0,423); print start "X" end}'` >> new_file
else
`echo $line` >> new_file
fi
done
但是我在执行脚本时遇到以下错误:
/ray/test/raymond$ ksh ray2.sh ray2.sh[3]:文件名:未找到 找到文件...
ray2.sh[14]: b: 未找到
ray2.sh[14]: b: 未找到
ray2.sh[14]: b: 未找到
我不知道为什么。这是我在solaris 10中做的
解决方法
好吧,我将展示 2 个示例,希望它们可以提供一个想法。 示例 1
filename = "/ray/test/raymond/test2.data"
if [ -f "$filename" -a -r "$filename" ]; then
while read -r line; do
if [ "${line:421:1}" = 'D' ]; then
printf '%s%s%s\n' "${line:0:420}" 'X' "${line:422}" >> "$new_file"
else
printf '%s\n' "$line" >> "$new_file"
fi
done < "$filename"
elif [ ! -f "$filename" ]; then
echo 'ERROR: Not a file'
return 1
elif [ ! -r "$filename" ]; then
echo 'ERROR: Can not read the file'
return 1
fi
示例 2
filename = "/ray/test/raymond/test2.data"
new_file="$filename"'_new.txt'
if [ -f "$filename" -a -r "$filename" ]; then
output="$new_file" awk 'BEGIN { output=ENVIRON["output"] }
{
if(substr($0,422,1) == "D") {
$0=sprintf("%s%s%s",substr($0,1,421),"X",423))
}
print $0 >> output
}' "$filename"
elif [ ! -f "$filename" ]; then
echo 'ERROR: Not a file'
return 1
elif [ ! -r "$filename" ]; then
echo 'ERROR: Can not read the file'
return 1
fi
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。