假设我们有变量“test”,其中包含换行符,例如\n
。如果我使用以下命令:
echo "$test" | grep '\n'
结果不是我所期望的。上面的grep
命令只搜索测试字符串是否包含字符'n'而不是换行符,因为'\''转义'n'字符。
如何编写grep命令来搜索特定字符串中的换行符? 仅供参考,以下情况也不对。
echo "$test" | grep '^.*$'
答案 0 :(得分:7)
通过使用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
以及newlines
您还可以使用wc
来计算文件(或变量/标准输出)中的characters
和words
{分别为{1}}和wc -m
。
或如何使用wc -w
将tr
替换为变量中未包含的唯一字符,例如:
\n
然后,您可以echo "$test" | tr '\n' '_'
one_two_three_
替换被替换的字符,在本例中为grep
或甚至使用_
cat -E
cat echo "$test" | cat -E
one$
two$
three$
或-E
在每行末尾显示--show-ends
。