5

たとえば、改行文字を含む変数「test」があるとします\n。次のコマンドを使用する場合:

echo "$test" | grep '\n'

結果は私が期待するものではありません。上記のgrepコマンドは、「\」エスケープ「n」文字であるため、改行ではなく文字「n」が含まれているかどうかのテスト文字列のみを検索します。

特定の文字列の改行文字を検索するgrepコマンドをどのように書く必要がありますか?参考までに、以下も正しくありません。

echo "$test" | grep '^.*$'
4

1 に答える 1

8

grepのオプションを使用して、-cこれに一致する行をカウントすることにより、これを実現できます。$文字が行末に一致することに注意してください。また、改行を保持するために\n二重引用符がどのように重要であるかもわかりません。$test

test="one
two
three"

echo $test | grep -c '$'
1

echo "$test" | grep -c '$'
3

オプションを使用して^、行の先頭などに対してテストすることも.*、質問のように行全体に対してテストすることもできます。^.*$-c


wc複数行の変数をテストするのはどうですかwc -l改行カウントを出力します。

echo "$test" | wc -l
3

また、とを使用してファイル(または変数/ stdout)でカウントおよびファイルを作成するためにnewlines使用することもできます。 wccharacterswordswc -mwc -w


または、たとえば、変数に含まれていない一意の文字trに置き換えるために使用するのはどうですか。\n

echo "$test" | tr '\n' '_'
one_two_three_

次にgrep、置き換えられた文字、この場合は_


または使用するcat -E

echo "$test" | cat -E
one$
two$
three$

cat-Eまたは各行の終わりに--show-ends表示されます。$

于 2012-11-11T21:18:03.723 に答える