5

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

echo "$test" | grep '\n'

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

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

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

1 回答 1

8

通过使用-cgrep 的选项来计算匹配的行数可以实现。请注意,$字符匹配行尾\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计数和。 characterswordswc -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 回答