使用Grep或AWK命令

时间:2015-10-10 22:12:53

标签: linux bash awk

我有这个文字信息的文件:

http://=
en.domain.com/registration.html#/?doitoken=1D7f1ad404-f84b-4a3b-8931=
-4f40b619730e



http://=
en.domain.com/registration.html#/?doitoken=5D8172f6e6-240f-42e6-8512=
-6d7f6bd61c2d



http://=
en.domain.com/registration.html#/?doitoken=8D8172f6e6-240f-42e6-8512=
-6d7f6bd61c2d

我如何在linux bash中使用grep或awk命令来实现这一点:

http://en.domain.com/registration.html#/?doitoken=1D7f1ad404-f84b-4a3b-8931-4f40b619730e
http://en.domain.com/registration.html#/?doitoken=5D8172f6e6-240f-42e6-8512-6d7f6bd61c2d
http://en.domain.com/registration.html#/?doitoken=8D8172f6e6-240f-42e6-8512-6d7f6bd61c2d

感谢您的回答!

3 个答案:

答案 0 :(得分:1)

awk 'BEGIN{FS="=\n"; RS=""; OFS=""} {print $1, $2, $3}' input_file

你也可以摆脱OFS=""并删除print语句中的,

答案 1 :(得分:0)

将程序保存为 pr.awk ,然后运行awk -f pr.awk input.dat

NF {
    n++
    sub(/=$/, "")
    ans = ans $0
}

n==3 { # flush
    print ans
    ans = ""; n = 0 
}

答案 2 :(得分:0)

$ awk '/=$/{sub(/=$/,""); printf "%s",$0;next} /./{print}' file
http://en.domain.com/registration.html#/?doitoken=1D7f1ad404-f84b-4a3b-8931-4f40b619730e
http://en.domain.com/registration.html#/?doitoken=5D8172f6e6-240f-42e6-8512-6d7f6bd61c2d
http://en.domain.com/registration.html#/?doitoken=8D8172f6e6-240f-42e6-8512-6d7f6bd61c2d

工作原理:

  • /=$/{sub(/=$/,""); printf "%s",$0;next}

    如果该行以=结尾,则删除尾随=,打印结果(不带尾随换行符)并跳转到next行。

  • /./{print}

    如果我们到达此处,则此行不会以=结尾,我们只是正常打印(使用尾随换行符)。