如何 grep 包含空格和换行符的字符串

如何 grep 包含空格和换行符的字符串

我想知道是否可以使用 grep 命令来挑选出包含空格和换行符的字符串,例如:

Hello
I
am
here right now

我对正则表达式和一般使用命令行仍然很陌生(这是我学习这个的第二天),所以我的尝试是这样的:

grep H[\s\S]*w <filename>

我认为 [\s\S] 会给你任何字符,包括空格和换行符(与 . 不同),但它不起作用。

我在 Mac 操作系统上使用终端(不确定这是否有影响)。

答案1

grep在线工作,所以,“你不能那样做”;但是,当我需要做类似的事情时bash,我不想/不能使用perl或类似的(或者,老实说,我只是想使用grep)我做了这样的事情:

tr '\n' '\a' < <filename> | grep --only-matching Hello$'\a'I$'\a'am$'\a'here\ right\ now | tr '\a' '\n'

tr翻译字符;在这里,你正在“翻译”新线路贝尔 ASCII 字符 [十六进制代码 \x07 或 '\a'],然后对其进行处理grep(请注意,grep会看到一个很长的单行字符串,其中贝尔 ASCII 字符代替新队字符),然后回到“正常”,翻译贝尔 ASCII 字符新队

没有必要使用贝尔 ASCII 字符:您可以使用文件中未出现的任何字符;就我而言,只是我喜欢数字七,并且通常文本文件不包含任何贝尔 ASCII 字符

顺便说一句:$'\a'Bash ANSI-C 引用

答案2

尝试这个:

sed -e '1h;2,$H;$!d;g' -re 's/(.*)(H\w+\n)(.*w\n)(.*)/\2\3/' test.txt

test.txt 文件包含:

Something 
Hello
I
am
here right now
Something else

测试用sed (GNU sed) 4.4.您可以通过 Homebrew 在 macOS 上安装 GNU sed macOS 上的默认 sed 是 BSD sed,某些选项略有不同。

干杯,

相关内容