UNIXでは非常に新しいものですが、プログラミングには新しいものではありません。 MacBookで端末を使用してください。クロスワードプーリで構成された単語のリストを管理して検索するために、Grepコマンドとそのバリエーションを試しました。十分簡単に見えますが、簡単な事例でなければならないと思っていたことが初期に詰まっていました。
私が入るとき
grep "^COW" masternospaces.txt
欲しいものを手に入れました。 COWで始まるすべての単語のリストでした。
しかし、私が入るとき
grep "COW$" masternospaces.txt
COWで終わる単語のリスト(多くの単語があります)を取得すると予想しましたが、何も返されませんでした。
ファイルはプレーンテキストファイルで、各行はすべて大文字の1つの単語(または空白のない単語の構文)です。
ここで何が起こるのかご存知ですか?
ベストアンサー1
grep
@steeldriverが述べたように、予想とは異なる行末スタイルが原因で問題が発生する可能性があります。
行末の確認
これを使用して、hexdump
行末の形式がどのように指定されたかを正確に確認できます。私が好きな形式を使用することをお勧めします。
hexdump -e '"%08_ad (0x%08_ax) "8/1 "%02x "" "8/1 "%02x "' -e '" "8/1 "%_p""|"8/1 "%_p""\n"' masternospaces.txt
出力で行末(0a
-> LF
、0d
->)を確認してくださいCR
。非常に簡単な例は次のとおりです。
$ hexdump -e '"%08_ad (0x%08_ax) "8/1 "%02x "" "8/1 "%02x "' -e '" "8/1 "%_p""|"8/1 "%_p""\n"' masternospaces.txt
00000000 (0x00000000) 4e 6f 20 43 4f 57 20 65 6e 64 69 6e 67 0d 0a 45 No COW e|nding..E
00000016 (0x00000010) 6e 64 69 6e 67 20 69 6e 20 43 4f 57 0d 0a nding in| COW..
dos形式の行末を参照してください0d 0a
。
行末の変更
あなたは見ることができますここまたはここさまざまなツールを使用して行末を変更するさまざまな方法がありますが、ワンタイム操作には常にvi / vimを使用できます。
vim masternospaces.txt
:set fileformat=unix
:wq
grepに変更はありません
grep
行末に関係なく一致させる場合は、常に次のように行末を指定できます。
grep 'COW[[:cntrl:]]*$' masternospaces.txt
空白行が表示されたら、-v
次のオプションを使用して、実際に一致するものがあるかどうかを確認できますcat
。
grep 'COW[[:cntrl:]]*$' masternospaces.txt | cat -v
私が個人的に好き
grepを使用して出力を正規化することもできますsed
。
sed -n '/COW^M*$/{;s/^M//g;p;};' masternospaces.txt
^M
キーボード入力で取得できる場所。Ctrl-V Ctrl-M
役に立ったことを願っています!