Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何使用grep命令确定字符串是否包含换行符?_Shell_Unix_Scripting_Grep - Fatal编程技术网

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

Shell 如何使用grep命令确定字符串是否包含换行符?,shell,unix,scripting,grep,Shell,Unix,Scripting,Grep,假设我们有一个包含换行符的变量“test”,例如,\n。如果我使用以下命令: echo "$test" | grep '\n' 结果不是我所期望的。上面的grep命令仅搜索测试字符串是否包含字符“n”,而不是换行符“\”之后的换行符 我应该如何编写grep命令来搜索特定字符串中的换行符? 仅供参考,以下内容也不正确 echo "$test" | grep '^.*$' 通过使用grep的-c选项来计算与此匹配的行,可以实现。注意$字符与行尾匹配,而不是\n还可以查看$test周围的双引号对于

假设我们有一个包含换行符的变量“test”,例如,
\n
。如果我使用以下命令:

echo "$test" | grep '\n'
结果不是我所期望的。上面的
grep
命令仅搜索测试字符串是否包含字符“n”,而不是换行符“\”之后的换行符

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

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

通过使用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
除了
换行符
之外,您还可以使用
wc
分别使用
wc-m
wc-w
对文件(或变量/stdout)中的
字符和
单词进行计数


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

echo "$test" | tr '\n' '_'
one_two_three_
然后,您可以对替换的字符执行
grep
,在本例中为
\uu


即使使用
cat-E

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

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

一般来说,
grep
通常不是查找换行符的正确工具。它最初的设计是读取一行,看看该行是否与模式匹配(虽然
$
在行尾匹配,但实际匹配的不是新行)。诚然,GNU
grep
可以做各种额外的技巧,但它仍然有一种“一次一行”的心态。作为输出,你到底想要什么?变量包含的行?行数的计数?只包含换行符而不包含其他内容的行?第二个
grep
命令的输出有什么问题。如果变量
$test
中有三行,它将选择三行,如果
grep
可以处理换行符,这就是您的第一个命令所做的。@Jonathan Leffler我想知道的是$test是否包含换行符。如果[$(echo“$test”| wc-l)-gt 2];然后:测试包含换行符;fi
@JonathanLeffler@eleven考虑了如何使用
grep
cat
实现这一点,尽管
wc
仍然是计算行数的最佳解决方案。@BeniBela:哪个文件?或者您正在考虑一个非常大的变量字符串?你确定额外流程和管道的成本会是净节约吗?@BeniBela我想这取决于OP想要什么,测试至少一个
\n
或计算多少。。。(和@JonathanLeffler point)。如果$test有一些“\u”字符,它将fail@sudo_o如果$test有一些“\u1”字符,它将fail@eleven是的,在这种情况下,你必须使用不同的字符,也许我不应该认为这是给定的。答复更新:)