如何grep文件中的所有字符

How to grep all characters in file

我有一个包含以下行的 CSV 文件:

----------+79975532211,----------+79975532212
4995876655,4995876658

我尝试在 Bash 脚本中 grep 这一行

#!/bin/bash

    config='/test/config.conf'

 sourcecsv=/test/sourse.csv

cat $sourcecsv | while read line

do

Oldnumber=$(echo $line | cut -d',' -f1)

cat $config | grep "\$Oldnumber" -B 8


done

但是当脚本 grep 值 4995876655 我得到错误:

grep: Invalid back reference

如何 grep 文件中的所有值?

而不是:

cat $config | grep "\$Oldnumber" -B 8

你应该这样做:

grep -B 8 -F -- "$Oldnumber" "$config"

如果你真的想 grep 逗号之间的所有字符串,你可以一次完成。

tr ',' '\n' </test/sourse.csv |
grep -F -f - -B 8 /test/config.conf

如果您需要按顺序获取匹配项(第一个字符串的所有匹配项,然后是第二个字符串的所有匹配项,等等),那么可以使用适当的 while 循环遍历它们:

tr ',' '\n' </test/sourse.csv |
while read -r Oldnumber; do
    grep -F -B 8 -e "$Oldnumber" /test/config.conf
done

将文件名保存在变量中似乎没有任何优势。

如果你想搜索以文字反斜杠开头的字符串,你可以把它加回去;我添加的 -F 选项将所有字符串转换为文字。如果你需要元字符,并且去掉 -F 选项,你需要双反斜杠(在双引号内,单个反斜杠需要表示为double;并且要在正则表达式中获得文字反斜杠,你需要其中两个)。