grep 换行后的内容
grep for contents AFTER line break
我的文件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
但没有成功。
尝试 sed:
sed -r '/^[0-9]+ sender:/d;/^date:\s+/d;/^\s*$/d' sms.txt >textonly.txt
以匹配日期和发件人 headers 的模式开头的行以及仅包含空格的行将被删除。
我相信这可以满足您的需求:
$ 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
使用 sed
sed -r '/^( *[0-9]* sender:| *date:| *$)/d' sms.txt
编辑 : 或
sed -nr '/^( *[0-9]* sender:| *date:| *$)/! {p}' sms.txt
在我看来,您可以使用 grep 执行以下操作。
grep -Eo '^[^:]+$' sms.txt
我的文件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
但没有成功。
尝试 sed:
sed -r '/^[0-9]+ sender:/d;/^date:\s+/d;/^\s*$/d' sms.txt >textonly.txt
以匹配日期和发件人 headers 的模式开头的行以及仅包含空格的行将被删除。
我相信这可以满足您的需求:
$ 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
使用 sed
sed -r '/^( *[0-9]* sender:| *date:| *$)/d' sms.txt
编辑 : 或
sed -nr '/^( *[0-9]* sender:| *date:| *$)/! {p}' sms.txt
在我看来,您可以使用 grep 执行以下操作。
grep -Eo '^[^:]+$' sms.txt