我有一个带有搜索项(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
最佳答案
shell变量不以单引号展开。另外,最好使用-v name=value
将参数传递给awk:
awk -v target="$target" '!($0 ~ target)' patterns.txt > temp && mv temp patterns.txt
不过,看起来您可以使用replace
awk
bygrep -v
:grep -v "$target" patterns.txt > temp && mv temp patterns.txt