即时修改行(例如,修复 Windows 行结尾)
如果文件可能包含 Windows 或类 Unix 行结尾(或者甚至是两者的混合),那么预期的文本替换可能无法按预期工作。
样品:
$ echo -e 'Entry 1\nEntry 2.1\tEntry 2.2\r\nEntry 3\r\n\r\n' \
> | awk -F'\t' '$1 != "" { print $1 }' \
> | hexdump -c
0000000 E n t r y 1 \n E n t r y 2 .
0000010 1 \n E n t r y 3 \r \n \r \n
000001d
这可以通过在 awk 脚本开头插入的附加规则轻松修复:
/\r$/ { $0 = substr($0, 1, length($0) - 1) }
由于操作不以 next
结束,因此以前的规则将被应用。
样本(修复了行尾):
$ echo -e 'Entry 1\nEntry 2.1\tEntry 2.2\r\nEntry 3\r\n\r\n' \
> | awk -F'\t' '/\r$/ { $0 = substr($0, 1, length($0) - 1) } $1 != "" { print $1 }' \
> | hexdump -c
0000000 E n t r y 1 \n E n t r y 2 .
0000010 1 \n E n t r y 3 \n
000001a