如何从grep,awk或sed的grep结果中删除像(),'* []这样的字符?

时间:2011-01-17 03:25:05

标签: sed awk grep

例如,如果我使用grep制作了一个文件,它会给我一个下一个结果:

16 Jan 07:18:42 (name1), xx.210.49.xx),
16 Jan 07:19:14 (name2), xx.210.xx.24),
16 Jan 07:19:17 (name3), xx.140.xxx.79),
16 Jan 07:19:44 (name4), xx.210.49.xx),
16 Jan 07:19:56 (name5), xx.140.xxx.79),

,然后如何sed awk或grep删除除日期名称和IP之外的所有内容,如下所示:

16 Jan 07:18:42 name1 xx.210.49.xx
16 Jan 07:19:14 name2 xx.210.xx.24
16 Jan 07:19:17 name3 xx.140.xxx.79
16 Jan 07:19:44 name4 xx.210.49.xx
16 Jan 07:19:56 name5 xx.140.xxx.79

我的grep命令如下所示:

grep 'double' $DAEMON | awk -F" " '{print $2" "$1" "$3" "$8" "$10}'  > $DBLOG

THX。

5 个答案:

答案 0 :(得分:3)

如果您只想删除某些字符,可能需要使用tr选项查看-d命令:

$ echo "16 Jan 07:18:42 (name1), xx.210.49.xx)," | tr -d "(),*'[]"
16 Jan 07:18:42 name1 xx.210.49.xx

答案 1 :(得分:1)

只需一个awk命令即可完成。无需使用grep

awk '/double/{gsub("[(),]","",$8); gsub("[(),]","",$10);print $2" "$1" "$3" "$8" "$10}'

或只是

awk '/double/{gsub("[(),]","");print $2" "$1" "$3" "$8" "$10}'

如果您还需要删除[],请使用此模式:gsub("[][(),]","")

答案 2 :(得分:1)

打破ghostdog74的回答:

awk '
    /double/ {
        gsub(/[(),\[\]]/, "")
        print $2" "$1" "$3" "$8" "$10
    }
'

/double/告诉awk仅对{ }中包含double/double/是正则表达式)的行执行内容。

gsub期望第一个参数是正则表达式,第二个参数是替换字符串,第三个参数是替换正在执行的变量。如果未指定第三个参数(如本例所示),则默认为$0,与整行匹配。

我将\[\]添加到正则表达式中,除了[]之外,还应该匹配()个字符,

一般情况下,当您发现自己合并awksedgrep时,几乎总有一种方法可以只用sed或{{{{{{ 1}}。

答案 3 :(得分:1)

使用sed

$> cat ./text | sed -r -e 's/(\(|\)\,)//g'
16 Jan 07:18:42 name1 xx.210.49.xx
16 Jan 07:19:14 name2 xx.210.xx.24
16 Jan 07:19:17 name3 xx.140.xxx.79
16 Jan 07:19:44 name4 xx.210.49.xx
16 Jan 07:19:56 name5 xx.140.xxx.79

Inb4 UselesUseOfCat:cat ./text此处类似于OP的grep输出。

答案 4 :(得分:1)

[jaypal@MBP-13~/temp] cat file1
16 Jan 07:18:42 (name1), xx.210.49.xx),
16 Jan 07:19:14 (name2), xx.210.xx.24),
16 Jan 07:19:17 (name3), xx.140.xxx.79),
16 Jan 07:19:44 (name4), xx.210.49.xx),
16 Jan 07:19:56 (name5), xx.140.xxx.79),

[jaypal@MBP-13~/temp] sed 's/\(.*[^(]\)(\(.*\)),\(.*\)),/\1\2\3/g' file1
16 Jan 07:18:42 name1 xx.210.49.xx
16 Jan 07:19:14 name2 xx.210.xx.24
16 Jan 07:19:17 name3 xx.140.xxx.79
16 Jan 07:19:44 name4 xx.210.49.xx
16 Jan 07:19:56 name5 xx.140.xxx.79