换行后grep for contents

时间:2015-02-13 00:35:49

标签: linux bash grep

我的档案sms.txt

1 sender: 887645651201059711697
date:   15/02/04,08:07:08

Maaf, pulsa Anda tidak cukup untuk mengaktifkan Pkt Super Ngebut 11GB, 30hr, Rp55rb. Ayo isi pulsa di XL Center, ATM, Minimarket, Inet, m-Banking. Info 817

如何仅打印短信内容?所以我希望输出如下:

Maaf, pulsa Anda tidak cukup untuk mengaktifkan Pkt Super Ngebut 11GB, 30hr, Rp55rb. Ayo isi pulsa di XL Center, ATM, Minimarket, Inet, m-Banking. Info 817

我尝试grep '\n.*' sms.txt但没有效果。

4 个答案:

答案 0 :(得分:2)

我相信这可以做你想要的:

$ awk '/^$/{f=1} f && /./{print;f=0}' sms.txt
Maaf, pulsa Anda tidak cukup untuk mengaktifkan Pkt Super Ngebut 11GB, 30hr, Rp55rb. Ayo isi pulsa di XL Center, ATM, Minimarket, Inet, m-Banking. Info 817

如何运作

  • /^$/{f=1}

    每次遇到空行时,标记f都会设置为1.

  • f && /./{print;f=0}

    如果标记f非零并且当前行不为空,则打印当前行并将f重置为零。

替代

正如Jotne在评论中所建议的,这里有两个awk命令可以实现相同的目标:

awk '!/./{f=1} f && /./{print;f=0}' sms.txt

awk '!NF{f=1} f && NF{print;f=0}' sms.txt

答案 1 :(得分:1)

尝试sed:

sed -r '/^[0-9]+ sender:/d;/^date:\s+/d;/^\s*$/d' sms.txt >textonly.txt

以与日期和发件人标题匹配的模式开头的行将被删除,以及仅包含空格的行。

答案 2 :(得分:0)

使用sed

sed -r '/^( *[0-9]* sender:| *date:| *$)/d' sms.txt

编辑:或

sed -nr '/^( *[0-9]* sender:| *date:| *$)/! {p}' sms.txt

答案 3 :(得分:0)

对我来说,你可以使用grep执行以下操作。

grep -Eo '^[^:]+$' sms.txt