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)
通过使用-c
grep选项来计算与此匹配的行.请注意,$
字符匹配行的末尾\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
您也可以使用wc
数characters
和words
在文件(或变量/标准输出)与wc -m
和wc -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
显示$
.