如何使用grep命令确定字符串是否包含换行符?

ele*_*ven 4 unix shell scripting grep

假设我们有变量"test",其中包含换行符,例如\n.如果我使用以下命令:

echo "$test" | grep '\n'
Run Code Online (Sandbox Code Playgroud)

结果不是我所期望的.上面的grep命令只搜索测试字符串是否包含字符'n'而不是换行符,因为'\''转义'n'字符.

我应该如何编写grep命令来搜索特定字符串中的换行符?仅供参考,以下情况也不对.

echo "$test" | grep '^.*$'
Run Code Online (Sandbox Code Playgroud)

Chr*_*our 7

通过使用-cgrep选项来计算与此匹配的行.请注意,$字符匹配行的末尾\n也不会看到双引号$test对于保留换行符很重要.

test="one
two
three"

echo $test | grep -c '$'
1

echo "$test" | grep -c '$'
3
Run Code Online (Sandbox Code Playgroud)

您也可以使用该选项测试^该行的开头或.*任何内容,或者在您的问题中测试整行.^.*$-c


如何wc测试多行变量.wc -l打印换行计数:

echo "$test" | wc -l
3
Run Code Online (Sandbox Code Playgroud)

藏汉因为newlines您也可以使用wccharacterswords在文件(或变量/标准输出)wc -mwc -w分别.


或者如何使用tr替换\n为变量中未包含的唯一字符,例如:

echo "$test" | tr '\n' '_'
one_two_three_
Run Code Online (Sandbox Code Playgroud)

grep在这种情况下,您可以使用替换后的角色_


或者即使使用cat -E

echo "$test" | cat -E
one$
two$
three$
Run Code Online (Sandbox Code Playgroud)

-E或在每行末尾--show-ends显示$.