我有一个带有搜索字词(patts)的文本文件,我需要从' patterns.txt'中删除。我已经测试了awk语句并且它正常工作 - 除了在脚本中。
此外,当我回显标准输出时,$ target变量正确打印。但是,出于某种原因,声明没有正确执行。
#!/usr/local/bin/bash
input_file='patts'
i=0
while read line; do
array[$i]=$line
i=$((i+1))
done < "$input_file"
for (( i=0; i<${#array[@]}; i++ )); do
target=`eval echo ${array[i]}`
echo $target
awk '!/$target/' patterns.txt > temp && mv temp patterns.txt
done
答案 0 :(得分:3)
Shell变量不会在单引号中扩展。最好使用-v name=value
将参数传递给awk:
awk -v target="$target" '!($0 ~ target)' patterns.txt > temp && mv temp patterns.txt
但您似乎可以使用awk
替换grep -v
:
grep -v "$target" patterns.txt > temp && mv temp patterns.txt