从Linux中的现有文件创建文件

时间:2018-07-02 05:14:12

标签: linux bash

我在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==

2 个答案:

答案 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