如何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;并且要在正则表达式中获得文字反斜杠,你需要其中两个)。
我有一个包含以下行的 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;并且要在正则表达式中获得文字反斜杠,你需要其中两个)。