Grepの正確な一致パターン

Grepの正確な一致パターン

/home/mytest/dataファイルの各行で特定のパターンを見つけようとしています。一致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

問題は、(非標準)オプションを使用すると、パターンの前後に単語の境界が必要であること-wです。grep「単語の境界」は、単語と単語の間の遷移です。 「単語」は単語文字(例えばa、等)を含む文字列であり、非単語は空白などの文字をb含む文字列/です。?

/「単語文字」ではないので、単語の境界が前に来ることはできません。前に単語文字で)。したがって、一部のバージョンはgrepデータの文字列と一致しません。その他のバージョン会議競争することができます。

直前の行のパスと一致させたいと思い、パスが# file: 同じ行の直前にあることを知っているので、次の文字列を与えられたパスの区切り文字として使用できます。 # owner:

querypath=/home/mytest/data

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

おすすめ記事