Question: How to give a pattern for new line in grep?
New line at beginning, new line at end. Not the regular expression way. Something like \n.

Answer: 
Thanks to @jarno I know about the -z option and I found out that when using GNU grep with the -P option, *matching against `\n` is possible*. :)

**Example:**

```
grep -zoP 'foo\n\K.*'<<<$'foo\nbar'

```

Result:

```
bar

```

**Example that involves matching everything including newlines:**

`.*` will not match newlines. To match everything including newlines, use1 `(.|\n)*`:

```
grep -zoP 'foo\n\K(.|\n)*'<<<$'foo\nbar\nqux'

```

Result:

```
bar
qux

```

1 Seen here: <https://stackoverflow.com/a/33418344>
As for the workaround (without using non-portable `-P`), you can temporary replace a new-line character with the different one and change it back, e.g.:

```
grep -o "_foo_" <(paste -sd_ file) | tr -d '_'

```

Basically it's looking for exact match `_foo_` where `_` means `\n` (so `__` = `\n\n`). You don't have to translate it back by `tr '_' '\n'`, as each pattern would be printed in the new line anyway, so removing `_` is enough.