我有一个带有搜索项(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

不过,看起来您可以使用replaceawkbygrep -v
grep -v "$target" patterns.txt > temp && mv temp patterns.txt

10-07 19:08
查看更多