Grep(Bash)错误

aya*_*sha 0 bash grep

我有一个名为new.samples.dat的文件

-4.5000000000E-01 8.0000000000E+00 -1.3000000000E-01
5.0000000000E-02 8.0000000000E+00 3.4000000000E-01
...
Run Code Online (Sandbox Code Playgroud)

我必须在另一个名为Remaining.Simulations.dat的文件中搜索此文件的所有这些数字,并将它们复制到另一个文件中.我确实喜欢这个

for sample_index in $(seq 1 100)
do
  sample=$(awk 'NR=='$sample_index'' new.samples.dat)
  grep "$sample" Remaining.Simulations.dat >> Previous.Training.dat
done
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但它不会将所有$ sample复制到Previous.Training.dat,即使我确定这些都在Remaining.Simulations.dat中出现此错误

grep: invalid option -- '.'
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.
Run Code Online (Sandbox Code Playgroud)

你知道怎么解决吗?谢谢

pax*_*blo 5

这是因为你正在尝试grep之类的东西,-4.5并将grep其作为一个选项而不是搜索字符串.如果您--用来表示没有更多选项,这应该可行:

pax> echo -4.5000000000E-01 | grep -4.5000000000E-01
grep: invalid option -- '.'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.

pax> echo -4.5000000000E-01 | grep -- -4.5000000000E-01
-4.5000000000E-01
Run Code Online (Sandbox Code Playgroud)

此外,如果您将字符串传递7.2grep,它将匹配任何包含7后跟任何字符的行,后跟2:

  1. 正则表达式.视为特殊字符; 和
  2. 没有开始和结束标记,7.2也会匹配47.2,7.25等等.