grepは変数で失敗しますが、変数のスペルを入力すると機能します。

grepは変数で失敗しますが、変数のスペルを入力すると機能します。

カンマ区切りのファイルが2つあります。

ファイル1から1行を読みましょう。

間にカンマを含むfile2で一致する行を見つける必要があります。

文字通り行を入力して(マウスでコピーして貼り付けるなど)、これを行うと必要なものが得られます。

その行を変数に割り当てると、何も得られません。

混乱しています。正規表現のマッチングに関する限り、私は何かが間違っていることを知っていますが、何ですか?

例は次のとおりです。

$ pattern=$(head -1 accts.csv)
$ echo $pattern
_ccc_net_pfx,_ccc_net_pfx_export
$ grep "$pattern" all.csv
$ grep "_ccc_net_pfx,_ccc_net_pfx_export" all.csv
MyDomain\user1,User-1,Administrator,_ccc_net_pfx,_ccc_net_pfx_export,owner,Application,,
MyDomain\user2,User-2,User,_ccc_net_pfx,_ccc_net_pfx_export,readonly,Application,,

ベストアンサー1

変数$patternにスペースが含まれています。または、Windowsシステムからインポートした場合は、^M最後に//がある可能性があります。CR\raccts.csv

echo $pattern(grep呼び出しのように)変数が引用されていないため、スペースは表示されないため、IFSメカニズムによってきちんと分割され、切り捨てられます。同様のことを試してくださいecho "{$pattern}"

あなたは自分自身を整理する必要があります:

$ pattern=$(sed 's/[ \r]//g;q' accts.csv)

おすすめ記事