我试图处理一个日志文件,其中条目被压缩成一行,换行符编码为" \ n"。我想把所有事情都放到第一个" \ n"并丢弃其余的。 awk -F"\n" '{print $1}' file
不起作用,awk -F"\\n" '{print $1}' file
也不起作用。这个命令的正确形式是什么?
答案 0 :(得分:2)
$ echo 'a\nb'
a\nb
$ echo 'a\nb' | awk -F'\\\\n' '{print $1}'
a
原因如下:在正则表达式比较中考虑上述字符的这些用法:
n
=文字字符n
($0 ~ /n/
)\n
=文字换行符($0 ~ /\n/
)\\
=在正则表达式常量中使用反斜杠($0 ~ /\\/
)\\\\
=在动态正则表达式中使用反斜杠($0 ~ "\\\\"
)最后一个是因为动态regexp是一个字符串,必须被解析一次才能转换为正则表达式,然后在用作regexp时再次被解析,所以因为它被解析两次所以需要将所有转义加倍
由于字段分隔符基本上是一个正则表达式(有几个曲折),当你说-F "whatever"
时,你将FS变量定义为动态正则表达式,因此转义必须加倍。
答案 1 :(得分:0)
由于您要删除\n
之后的所有内容,请使用
awk -F '\\\\n' '{print $1}' fileName
这将查找\n
(使用\
转义反斜杠并使用n
转义\
)并将所有内容打印到其中。