我在Liunx
中有一个文件,其中有很多行。
Contents of the file:
abcdeqroop[
g
;ld
'
d
sksd
;
s'sa;abcdeqroop';kaf
100 gmail eng en101 usa ten
yahoomail dffdd
''
100 200 hotmail and'usfifoi2[[[[[10101
f[
dsl
ks
s'dakd
sd1jz
sdj
sasa;kas
';cxvdl;s;4
;sdljodsl
600 outlookmail 79903083434==13==
我要从此文件创建如下所示的新文件
gmail eng en101 usa ten
yahoomail dffdd
hotmail and'usfifoi2[[[[[10101
outlookmail 79903083434==13==
Conditions to create the file.
检查是否有任何行的gmail, yahoomail, hotmail, outlookmail
后面跟随着字符串。
If string is not present then delete the file.
If string is present then delete all the characters before it and get the rest of the characters as new line.
我该怎么做?
我已经完成了以下操作
grep -E 'gmail|yahoomail|outlookmail|hotmail' test_file
我得到的输出如下
100 gmail eng en101 usa ten
yahoomail dffdd
100 200 hotmail and'usfifoi2[[[[[10101
600 outlookmail 79903083434==13==
答案 0 :(得分:1)
您可以为其创建一个小脚本,例如:
#!/bin/bash
# -*- coding: utf-8 -*-
OLDIFS=$IFS
IFS=$'\n'
echo -n "Choose the file to read: "; read File
echo -n "Name of the file to be saved: "; read File2
true > $File2
for line in `cat $File`
do
case "$line" in
*"hotmail"*) echo -e $line | sed 's/^.*hotmail/hotmail/' >> $File2;;
*"yahoo"*) echo -e $line | sed 's/^.*yahoo/yahoo/' >> $File2;;
*"gmail"*) echo -e $line | sed 's/^.*gmail/gmail/' >> $File2;;
*"outlookmail"*) echo -e $line | sed 's/^.*outlookmail/outlookmail/' >> $File2;;
esac
done
IFS=$OLDIFS
希望这对您有所帮助
答案 1 :(得分:-1)
您可以使用以下命令-
第一部分-从整个文件中查找邮件别名
egrep -r "*mail*" temp >> temp1
第二部分-删除多余的字符
sed -re "s@(.*)\s(.*mail)(.*)@\2\3@" temp1