Grep 完全匹配模式

Grep 完全匹配模式

我试图/home/mytest/data从文件的每一行中grep 特定模式1.txt,当找到匹配时,然后将完整行复制到2.txt文件中。但2.txt文件中的结果集不是预期的结果。

代码

i=/home/mytest/data
IFS=',' read -ra ADDR <<< "$File_Name"
Input=1.txt
for i in "${ADDR[@]}";
do
  j=0
  while IFS= read -r line;
  do
    j=$((j+1))
    Exists=$(echo $line | grep -w "$i" )
    if [[ ! -z "$Exists" ]]; then
      cp=$(echo $line >> 2.txt)
    fi
  done <"$Input"    

预期结果 - 2.txt

# file: /home/mytest/data # owner: own # group: group-sm user::r-x group::rwx mask::rwx other::--- default:user::rwx default:group::r-x default:group:smr:rwx default:group:agm:r-x default:mask::rwx default:other::---

实际结果 - 2.txt

# file: /home/mytest/data # owner: own # group: group-sm user::r-x group::rwx mask::rwx other::--- default:user::rwx default:group::r-x default:group:smr:rwx default:group:agm:r-x default:mask::rwx default:other::---
# file: /home/mytest/datasr123 # owner: own # group: group-sm user::r-x group::rwx mask::rwx other::--- 

grep 版本:GNU grep 2.20

答案1

问题是,使用(非标准)选项-wgrep将需要在模式之前和之后有一个字边界。 “词边界”是词和非词之间的过渡。 “单词”是包含单词字符(如ab等)的字符串,而非单词是包含空格、 、 等字符的/字符串?

由于/不是“单词字符”,因此它之前不能有单词边界(除非它立即之前通过单词字符)。因此,某些版本grep永远无法匹配数据中的字符串。其他版本能够进行比赛。

由于您似乎想要匹配紧接其前面的行上的路径,并且由于我们知道该路径在同一行上# file: 紧随其后,因此我们可以使用这些字符串作为给定路径的分隔符: # owner:

querypath=/home/mytest/data

grep -F "# file: $querypath # owner:" 1.txt >2.txt

相关内容