Linux 换行后内容的grep
我的文件Linux 换行后内容的grep,linux,bash,grep,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 如何仅打印短信内容?所以我希望输出如下:
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
以日期和发件人标题匹配的模式开头的行以及仅包含空格的行将被删除。我相信这会满足您的要求:
$ 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
不起作用,我编辑了我的问题以使其更容易解决,请再次查看。不,输出与原始文件完全相同。这是两个建议答案中更便于携带的一个。我不会使用/^$/
和/./
。您可以使用awk'!//{f=1}f&&/{print;f=0}'
,但我会使用awk'!NF{f=1}f&&NF{print;f=0}'
@Jotne好主意。我在答案中添加了这两条消息。你的sms.txt
是否只有一条消息,或者可能有多条消息?这是巧合——消息中很可能包含冒号。