即時修改行(例如,修復 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