各行の最初の数文字をegrepしますか?

各行の最初の数文字をegrepしますか?

テキストファイルがあるとしましょう。

txt.txt

hello supdijfdsfsddsgs
hghgh hsdjghjfhgjfhgjfhg
hghgh yyyyyereuryueyruey

5最初の文字だけがシーケンスになるようにこの行を印刷したいと思いますhghgh

だから印刷する必要があります

    hghgh hsdjghjfhgjfhgjfhg
    hghgh yyyyyereuryueyruey

egrepはどうすればいいですか?

egrep -5 "hghgh" txt.txt

答え1

これにより、次のようになります。

grep '^hghgh' txt.txt

egrepisは(isgrep -Eと同様に)拡張正規表現を使用する必要はないので、ここでは必要ありません。fgrepgrep -F-E

^hghgh(デフォルト)行の先頭のリテラル文字列と一致する正規表現です。パターンを線の先頭に固定しますhghgh^

似合いたい場合精密文字列は、たとえば部分文字列ではhghghなく行の先頭にあります。次に、式の末尾にまたはを使用して単語の末尾に一致させます。hghghaaaaaahghgh\>\b[[:>:]]

grep '^hghgh\>' txt.txt

または、awk最初のフィールドを使用して文字列比較を実行します。

awk '$1 == "hghgh"' txt.txt

答え2

この猫の皮をむく方法はいくつかあります。

grepgrep -Eと動作しますegrepが、grepここでは基本的に動作します):

grep '^hghgh' /path/to/input

そしてsed

sed -n '/^hghgh/p' /path/to/input
sed '/^hghgh/!d' /path/to/input

そしてawk

awk '/^hghgh/' /path/to/input

これは次の略語です。

awk '/^hghgh/ { print $0 }' /path/to/input

または

awk 'index($0, "hghgh") == 1' /path/to/input

または

awk 'substr($0, 1, 5) == "hghgh"' /path/to/input

関連情報