zoukankan      html  css  js  c++  java
  • (转)Linux命令学习总结:dos2unix

    Linux命令学习总结:dos2unix - unix2dos

    命令简介:

     原文:http://www.cnblogs.com/kerrycode/p/5077969.html

    dos2unix是将Windows格式文件转换为Unix、Linux格式的实用命令。Windows格式文件的换行符为 ,而Unix&Linux文件的换行符为 . dos2unix命令其实就是将文件中的 转换为 。

    而unix2dos则是和dos2unix互为孪生的一个命令,它是将Linux&Unix格式文件转换为Windows格式文件的命令。


    命令语法:


    dos2unix [options] [-c convmode] [-o file ...] [-n infile outfile ...]


    unix2dos [options] [-c convmode] [-o file ...] [-n infile outfile ...]


    命令参数:

    此命令参数是Red Hat Enterprise Linux Server release 5.7下dos2unix命令参数,不同版本Linux的dos2nnix命令参数有可能不同。

    参数
    长参数
    描叙
    -h

    显示命令dos2unix联机帮助信息。
    -k

    保持文件时间戳不变
    -q

    静默模式,不输出转换结果信息等
    -V

    显示命令版本信息
    -c

    转换模式
    -o

    在源文件转换,默认参数
    -n

    保留原本的旧档,将转换后的内容输出到新档案.默认都会直接在原来的文件上修改,


    使用示例:

    1: 查看dos2unix命令的帮助信息

    [root@DB-Server myscript]# man dos2unix

    [root@DB-Server myscript]# dos2unix -h
    dos2unix Copyright (c) 1994-1995 Benjamin Lin
    Copyright (c) 1998 Bernd Johannes Wuebben (Version 3.0)
    Copyright (c) 1998 Christian Wurll (Version 3.1)
    Usage: dos2unix [-hkqV] [-c convmode] [-o file ...] [-n infile outfile ...]
    -h --help give this help
    -k --keepdate keep output file date
    -q --quiet quiet mode, suppress all warnings
    always on in stdin->stdout mode
    -V --version display version number
    -c --convmode conversion mode
    convmode ASCII, 7bit, ISO, Mac, default to ASCII
    -l --newline add additional newline in all but Mac convmode
    -o --oldfile write to old file
    file ... files to convert in old file mode
    -n --newfile write to new file
    infile original file in new file mode
    outfile output file in new file mode

    2: dos2unix filename 将Windows格式文本转换为Unix&Linux格式文件

    1: [root@DB-Server myscript]# cat -v test.sh
    2: . /home/oracle/.bash_profile^M
    3: echo ' '^M
    4: date^M
    5: echo ' '^M
    6: ^M
    7: sqlplus test/test @/home/oracle/scripts/test.sql^M
    8: ^M
    9: echo ' '^M
    10: date^M
    11: echo ' '^M
    12: [root@DB-Server myscript]# dos2unix test.sh
    13: dos2unix: converting file test.sh to UNIX format ...
    14: [root@DB-Server myscript]# cat -v test.sh
    15: . /home/oracle/.bash_profile
    16: echo ' '
    17: date
    18: echo ' '
    19:
    20: sqlplus test/test @/home/oracle/scripts/test.sql
    21:
    22: echo ' '
    23: date
    24: echo ' '

    3: dos2unix 可以一次转换多个文件

    1: dos2unix filename1 filename2 filename3

    4: 默认情况下会在源文件上进行转换,如果需要保留源文件,那么可以使用参数-n dos2unix -n oldfilename newfilename

    1: [root@DB-Server myscript]# dos2unix -n dosfile linuxfile
    2: dos2unix: converting file dosfile to file linuxfile in UNIX format ...
    3: [root@DB-Server myscript]# cat -v dosfile
    4: it is a windows dos file^M
    5: you should convert to unix&linux format^M
    6: [root@DB-Server myscript]# cat -v linuxfile
    7: it is a windows dos file
    8: you should convert to unix&linux format
    9: [root@DB-Server myscript]#
    clip_image001

    5:保持文件时间戳不变

    1: [root@DB-Server myscript]# ls -lrt dosfile
    2: -rw-r--r-- 1 root root 67 Dec 26 11:46 dosfile
    3: [root@DB-Server myscript]# dos2unix dosfile
    4: dos2unix: converting file dosfile to UNIX format ...
    5: [root@DB-Server myscript]# ls -lrt dosfile
    6: -rw-r--r-- 1 root root 65 Dec 26 11:58 dosfile
    7: [root@DB-Server myscript]# dos2unix -k dosfile
    8: dos2unix: converting file dosfile to UNIX format ...
    9: [root@DB-Server myscript]# ls -lrt dosfile
    10: -rw-r--r-- 1 root root 65 Dec 26 11:58 dosfile
    6:静默模式格式化文件

    1: [root@DB-Server myscript]# unix2dos -q dosfile
    2:
    3: [root@DB-Server myscript]#
    dos2unix的下载地址为http://sourceforge.net/projects/dos2unix/ ,可以从上面下载最新版本的dos2unix、unix2dos等命令工具以及相关文档,dos2unix的源码如下所示

    1: /*
    2:
    3: * Name: dos2unix
    4:
    5: * Documentation:
    6:
    7: * Remove cr ('x0d') characters from a file.
    8:
    9: *
    10:
    11: * The dos2unix package is distributed under FreeBSD style license.
    12:
    13: * See also http://www.freebsd.org/copyright/freebsd-license.html
    14:
    15: * --------
    16:
    17: *
    18:
    19: * Copyright (C) 2009-2015 Erwin Waterlander
    20:
    21: * Copyright (C) 1998 Christian Wurll
    22:
    23: * Copyright (C) 1998 Bernd Johannes Wuebben
    24:
    25: * Copyright (C) 1994-1995 Benjamin Lin.
    26:
    27: * All rights reserved.
    28:
    29: *
    30:
    31: * Redistribution and use in source and binary forms, with or without
    32:
    33: * modification, are permitted provided that the following conditions
    34:
    35: * are met:
    36:
    37: * 1. Redistributions of source code must retain the above copyright
    38:
    39: * notice, this list of conditions and the following disclaimer.
    40:
    41: * 2. Redistributions in binary form must reproduce the above copyright
    42:
    43: * notice in the documentation and/or other materials provided with
    44:
    45: * the distribution.
    46:
    47: *
    48:
    49: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
    50:
    51: * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    52:
    53: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    54:
    55: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE
    56:
    57: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    58:
    59: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
    60:
    61: * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
    62:
    63: * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
    64:
    65: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
    66:
    67: * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
    68:
    69: * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    70:
    71: *
    72:
    73: * == 1.0 == 1989.10.04 == John Birchfield (jb@koko.csustan.edu)
    74:
    75: * == 1.1 == 1994.12.20 == Benjamin Lin (blin@socs.uts.edu.au)
    76:
    77: * Cleaned up for Borland C/C++ 4.02
    78:
    79: * == 1.2 == 1995.03.16 == Benjamin Lin (blin@socs.uts.edu.au)
    80:
    81: * Modified to more conform to UNIX style.
    82:
    83: * == 2.0 == 1995.03.19 == Benjamin Lin (blin@socs.uts.edu.au)
    84:
    85: * Rewritten from scratch.
    86:
    87: * == 2.1 == 1995.03.29 == Benjamin Lin (blin@socs.uts.edu.au)
    88:
    89: * Conversion to SunOS charset implemented.
    90:
    91: * == 2.2 == 1995.03.30 == Benjamin Lin (blin@socs.uts.edu.au)
    92:
    93: * Fixed a bug in 2.1 where in new-file mode, if outfile already exists
    94:
    95: * conversion can not be completed properly.
    96:
    97: *
    98:
    99: * Added Mac text file translation, i.e. to conversion
    100:
    101: * Bernd Johannes Wuebben, wuebben@kde.org
    102:
    103: * Wed Feb 4 19:12:58 EST 1998
    104:
    105: *
    106:
    107: * Added extra newline if ^M occurs
    108:
    109: * Christian Wurll, wurll@ira.uka.de
    110:
    111: * Thu Nov 19 1998
    112:
    113: *
    114:
    115: * See ChangeLog.txt for complete version history.
    116:
    117: *
    118:
    119: */
    120:
    121:
    122:
    123: /* #define DEBUG 1 */
    124:
    125: #define __DOS2UNIX_C
    126:
    127:
    128: #include "common.h"
    129:
    130: #include "dos2unix.h"
    131:
    132: # if (defined(_WIN32) && !defined(__CYGWIN__))
    133:
    134: #include <windows.h>
    135:
    136: #endif
    137:
    138: #ifdef D2U_UNICODE
    139:
    140: #if !defined(__MSDOS__) && !defined(_WIN32) && !defined(__OS2__) /* Unix, Cygwin */
    141:
    142: # include <langinfo.h>
    143:
    144: #endif
    145:
    146: #endif
    147:
    148:
    149: void PrintLicense(void)
    150:
    151: {
    152:
    153: printf("%s", _("
    154:
    155: Copyright (C) 2009-2015 Erwin Waterlander
    156:
    157: Copyright (C) 1998 Christian Wurll (Version 3.1)
    158:
    159: Copyright (C) 1998 Bernd Johannes Wuebben (Version 3.0)
    160:
    161: Copyright (C) 1994-1995 Benjamin Lin
    162:
    163: All rights reserved. "));
    164:
    165: PrintBSDLicense();
    166:
    167: }
    168:
    169:
    170: #ifdef D2U_UNICODE
    171:
    172: wint_t StripDelimiterW(FILE* ipInF, FILE* ipOutF, CFlag *ipFlag, wint_t CurChar, unsigned int *converted, const char *progname)
    173:
    174: {
    175:
    176: wint_t TempNextChar;
    177:
    178: /* CurChar is always CR (x0d) */
    179:
    180: /* In normal dos2unix mode put nothing (skip CR). */
    181:
    182: /* Don't modify Mac files when in dos2unix mode. */
    183:
    184: if ( (TempNextChar = d2u_getwc(ipInF, ipFlag->bomtype)) != WEOF) {
    185:
    186: if (d2u_ungetwc( TempNextChar, ipInF, ipFlag->bomtype) == WEOF) { /* put back peek char */
    187:
    188: d2u_getc_error(ipFlag,progname);
    189:
    190: return WEOF;
    191:
    192: }
    193:
    194: if ( TempNextChar != 0x0a ) {
    195:
    196: if (d2u_putwc(CurChar, ipOutF, ipFlag, progname) == WEOF) { /* Mac line, put CR */
    197:
    198: d2u_putwc_error(ipFlag,progname);
    199:
    200: return WEOF;
    201:
    202: }
    203:
    204: } else {
    205:
    206: (*converted)++;
    207:
    208: if (ipFlag->NewLine) { /* add additional LF? */
    209:
    210: if (d2u_putwc(0x0a, ipOutF, ipFlag, progname) == WEOF) {
    211:
    212: d2u_putwc_error(ipFlag,progname);
    213:
    214: return WEOF;
    215:
    216: }
    217:
    218: }
    219:
    220: }
    221:
    222: } else {
    223:
    224: if (ferror(ipInF)) {
    225:
    226: d2u_getc_error(ipFlag,progname);
    227:
    228: return WEOF;
    229:
    230: }
    231:
    232: if ( CurChar == 0x0d ) { /* EOF: last Mac line delimiter (CR)? */
    233:
    234: if (d2u_putwc(CurChar, ipOutF, ipFlag, progname) == WEOF) {
    235:
    236: d2u_putwc_error(ipFlag,progname);
    237:
    238: return WEOF;
    239:
    240: }
    241:
    242: }
    243:
    244: }
    245:
    246: return CurChar;
    247:
    248: }
    249:
    250: #endif
    251:
    252:
    253: /* CUR NEXT
    254:
    255: 0xd(CR) 0xa(LF) => put LF if option -l was used
    256:
    257: 0xd(CR) ! 0xa(LF) => put CR
    258:
    259: 0xd(CR) EOF => put CR
    260:
    261: */
    262:
    263: int StripDelimiter(FILE* ipInF, FILE* ipOutF, CFlag *ipFlag, int CurChar, unsigned int *converted, const char *progname)
    264:
    265: {
    266:
    267: int TempNextChar;
    268:
    269: /* CurChar is always CR (x0d) */
    270:
    271: /* In normal dos2unix mode put nothing (skip CR). */
    272:
    273: /* Don't modify Mac files when in dos2unix mode. */
    274:
    275: if ( (TempNextChar = fgetc(ipInF)) != EOF) {
    276:
    277: if (ungetc( TempNextChar, ipInF ) == EOF) { /* put back peek char */
    278:
    279: d2u_getc_error(ipFlag,progname);
    280:
    281: return EOF;
    282:
    283: }
    284:
    285: if ( TempNextChar != 'x0a' ) {
    286:
    287: if (fputc( CurChar, ipOutF ) == EOF) { /* Mac line, put CR */
    288:
    289: d2u_putc_error(ipFlag,progname);
    290:
    291: return EOF;
    292:
    293: }
    294:
    295: } else {
    296:
    297: (*converted)++;
    298:
    299: if (ipFlag->NewLine) { /* add additional LF? */
    300:
    301: if (fputc('x0a', ipOutF) == EOF) {
    302:
    303: d2u_putc_error(ipFlag,progname);
    304:
    305: return EOF;
    306:
    307: }
    308:
    309: }
    310:
    311: }
    312:
    313: } else {
    314:
    315: if (ferror(ipInF)) {
    316:
    317: d2u_getc_error(ipFlag,progname);
    318:
    319: return EOF;
    320:
    321: }
    322:
    323: if ( CurChar == 'x0d' ) { /* EOF: last Mac line delimiter (CR)? */
    324:
    325: if (fputc( CurChar, ipOutF ) == EOF) {
    326:
    327: d2u_putc_error(ipFlag,progname);
    328:
    329: return EOF;
    330:
    331: }
    332:
    333: }
    334:
    335: }
    336:
    337: return CurChar;
    338:
    339: }
    340:
    341:
    342: /* converts stream ipInF to UNIX format text and write to stream ipOutF
    343:
    344: * RetVal: 0 if success
    345:
    346: * -1 otherwise
    347:
    348: */
    349:
    350: #ifdef D2U_UNICODE
    351:
    352: int ConvertDosToUnixW(FILE* ipInF, FILE* ipOutF, CFlag *ipFlag, const char *progname)
    353:
    354: {
    355:
    356: int RetVal = 0;
    357:
    358: wint_t TempChar;
    359:
    360: wint_t TempNextChar;
    361:
    362: unsigned int line_nr = 1;
    363:
    364: unsigned int converted = 0;
    365:
    366:
    367: ipFlag->status = 0;
    368:
    369:
    370: /* CR-LF -> LF */
    371:
    372: /* LF -> LF, in case the input file is a Unix text file */
    373:
    374: /* CR -> CR, in dos2unix mode (don't modify Mac file) */
    375:
    376: /* CR -> LF, in Mac mode */
    377:
    378: /* x0a = Newline/Line Feed (LF) */
    379:
    380: /* x0d = Carriage Return (CR) */
    381:
    382:
    383: switch (ipFlag->FromToMode)
    384:
    385: {
    386:
    387: case FROMTO_DOS2UNIX: /* dos2unix */
    388:
    389: while ((TempChar = d2u_getwc(ipInF, ipFlag->bomtype)) != WEOF) { /* get character */
    390:
    391: if ((ipFlag->Force == 0) &&
    392:
    393: (TempChar < 32) &&
    394:
    395: (TempChar != 0x0a) && /* Not an LF */
    396:
    397: (TempChar != 0x0d) && /* Not a CR */
    398:
    399: (TempChar != 0x09) && /* Not a TAB */
    400:
    401: (TempChar != 0x0c)) { /* Not a form feed */
    402:
    403: RetVal = -1;
    404:
    405: ipFlag->status |= BINARY_FILE ;
    406:
    407: if (ipFlag->verbose) {
    408:
    409: if ((ipFlag->stdio_mode) && (!ipFlag->error)) ipFlag->error = 1;
    410:
    411: d2u_fprintf(stderr, "%s: ", progname);
    412:
    413: d2u_fprintf(stderr, _("Binary symbol 0x00%02X found at line %u "),TempChar, line_nr);
    414:
    415: }
    416:
    417: break;
    418:
    419: }
    420:
    421: if (TempChar != 0x0d) {
    422:
    423: if (TempChar == 0x0a) /* Count all DOS and Unix line breaks */
    424:
    425: ++line_nr;
    426:
    427: if (d2u_putwc(TempChar, ipOutF, ipFlag, progname) == WEOF) {
    428:
    429: RetVal = -1;
    430:
    431: d2u_putwc_error(ipFlag,progname);
    432:
    433: break;
    434:
    435: }
    436:
    437: } else {
    438:
    439: if (StripDelimiterW( ipInF, ipOutF, ipFlag, TempChar, &converted, progname) == WEOF) {
    440:
    441: RetVal = -1;
    442:
    443: break;
    444:
    445: }
    446:
    447: }
    448:
    449: }
    450:
    451: if ((TempChar == WEOF) && ferror(ipInF)) {
    452:
    453: RetVal = -1;
    454:
    455: d2u_getc_error(ipFlag,progname);
    456:
    457: }
    458:
    459: break;
    460:
    461: case FROMTO_MAC2UNIX: /* mac2unix */
    462:
    463: while ((TempChar = d2u_getwc(ipInF, ipFlag->bomtype)) != WEOF) {
    464:
    465: if ((ipFlag->Force == 0) &&
    466:
    467: (TempChar < 32) &&
    468:
    469: (TempChar != 0x0a) && /* Not an LF */
    470:
    471: (TempChar != 0x0d) && /* Not a CR */
    472:
    473: (TempChar != 0x09) && /* Not a TAB */
    474:
    475: (TempChar != 0x0c)) { /* Not a form feed */
    476:
    477: RetVal = -1;
    478:
    479: ipFlag->status |= BINARY_FILE ;
    480:
    481: if (ipFlag->verbose) {
    482:
    483: if ((ipFlag->stdio_mode) && (!ipFlag->error)) ipFlag->error = 1;
    484:
    485: d2u_fprintf(stderr, "%s: ", progname);
    486:
    487: d2u_fprintf(stderr, _("Binary symbol 0x00%02X found at line %u "), TempChar, line_nr);
    488:
    489: }
    490:
    491: break;
    492:
    493: }
    494:
    495: if ((TempChar != 0x0d)) {
    496:
    497: if (TempChar == 0x0a) /* Count all DOS and Unix line breaks */
    498:
    499: ++line_nr;
    500:
    501: if(d2u_putwc(TempChar, ipOutF, ipFlag, progname) == WEOF) {
    502:
    503: RetVal = -1;
    504:
    505: d2u_putwc_error(ipFlag,progname);
    506:
    507: break;
    508:
    509: }
    510:
    511: }
    512:
    513: else{
    514:
    515: /* TempChar is a CR */
    516:
    517: if ( (TempNextChar = d2u_getwc(ipInF, ipFlag->bomtype)) != WEOF) {
    518:
    519: if (d2u_ungetwc( TempNextChar, ipInF, ipFlag->bomtype) == WEOF) { /* put back peek char */
    520:
    521: d2u_getc_error(ipFlag,progname);
    522:
    523: RetVal = -1;
    524:
    525: break;
    526:
    527: }
    528:
    529: /* Don't touch this delimiter if it's a CR,LF pair. */
    530:
    531: if ( TempNextChar == 0x0a ) {
    532:
    533: if (d2u_putwc(0x0d, ipOutF, ipFlag, progname) == WEOF) { /* put CR, part of DOS CR-LF */
    534:
    535: d2u_putwc_error(ipFlag,progname);
    536:
    537: RetVal = -1;
    538:
    539: break;
    540:
    541: }
    542:
    543: continue;
    544:
    545: }
    546:
    547: }
    548:
    549: if (d2u_putwc(0x0a, ipOutF, ipFlag, progname) == WEOF) { /* MAC line end (CR). Put LF */
    550:
    551: RetVal = -1;
    552:
    553: d2u_putwc_error(ipFlag,progname);
    554:
    555: break;
    556:
    557: }
    558:
    559: converted++;
    560:
    561: line_nr++; /* Count all Mac line breaks */
    562:
    563: if (ipFlag->NewLine) { /* add additional LF? */
    564:
    565: if (d2u_putwc(0x0a, ipOutF, ipFlag, progname) == WEOF) {
    566:
    567: RetVal = -1;
    568:
    569: d2u_putwc_error(ipFlag,progname);
    570:
    571: break;
    572:
    573: }
    574:
    575: }
    576:
    577: }
    578:
    579: }
    580:
    581: if ((TempChar == WEOF) && ferror(ipInF)) {
    582:
    583: RetVal = -1;
    584:
    585: d2u_getc_error(ipFlag,progname);
    586:
    587: }
    588:
    589: break;
    590:
    591: default: /* unknown FromToMode */
    592:
    593: ;
    594:
    595: #if DEBUG
    596:
    597: d2u_fprintf(stderr, "%s: ", progname);
    598:
    599: d2u_fprintf(stderr, _("program error, invalid conversion mode %d "),ipFlag->FromToMode);
    600:
    601: exit(1);
    602:
    603: #endif
    604:
    605: }
    606:
    607: if (ipFlag->status & UNICODE_CONVERSION_ERROR)
    608:
    609: ipFlag->line_nr = line_nr;
    610:
    611: if ((RetVal == 0) && (ipFlag->verbose > 1)) {
    612:
    613: d2u_fprintf(stderr, "%s: ", progname);
    614:
    615: d2u_fprintf(stderr, _("Converted %u out of %u line breaks. "), converted, line_nr -1);
    616:
    617: }
    618:
    619: return RetVal;
    620:
    621: }
    622:
    623: #endif
    624:
    625:
    626: /* converts stream ipInF to UNIX format text and write to stream ipOutF
    627:
    628: * RetVal: 0 if success
    629:
    630: * -1 otherwise
    631:
    632: */
    633:
    634: int ConvertDosToUnix(FILE* ipInF, FILE* ipOutF, CFlag *ipFlag, const char *progname)
    635:
    636: {
    637:
    638: int RetVal = 0;
    639:
    640: int TempChar;
    641:
    642: int TempNextChar;
    643:
    644: int *ConvTable;
    645:
    646: unsigned int line_nr = 1;
    647:
    648: unsigned int converted = 0;
    649:
    650:
    651: ipFlag->status = 0;
    652:
    653:
    654: switch (ipFlag->ConvMode) {
    655:
    656: case CONVMODE_ASCII: /* ascii */
    657:
    658: case CONVMODE_UTF16LE: /* Assume UTF-16LE, bomtype = FILE_UTF8 or GB18030 */
    659:
    660: case CONVMODE_UTF16BE: /* Assume UTF-16BE, bomtype = FILE_UTF8 or GB18030 */
    661:
    662: ConvTable = D2UAsciiTable;
    663:
    664: break;
    665:
    666: case CONVMODE_7BIT: /* 7bit */
    667:
    668: ConvTable = D2U7BitTable;
    669:
    670: break;
    671:
    672: case CONVMODE_437: /* iso */
    673:
    674: ConvTable = D2UIso437Table;
    675:
    676: break;
    677:
    678: case CONVMODE_850: /* iso */
    679:
    680: ConvTable = D2UIso850Table;
    681:
    682: break;
    683:
    684: case CONVMODE_860: /* iso */
    685:
    686: ConvTable = D2UIso860Table;
    687:
    688: break;
    689:
    690: case CONVMODE_863: /* iso */
    691:
    692: ConvTable = D2UIso863Table;
    693:
    694: break;
    695:
    696: case CONVMODE_865: /* iso */
    697:
    698: ConvTable = D2UIso865Table;
    699:
    700: break;
    701:
    702: case CONVMODE_1252: /* iso */
    703:
    704: ConvTable = D2UIso1252Table;
    705:
    706: break;
    707:
    708: default: /* unknown convmode */
    709:
    710: ipFlag->status |= WRONG_CODEPAGE ;
    711:
    712: return(-1);
    713:
    714: }
    715:
    716: /* Turn off ISO and 7-bit conversion for Unicode text files */
    717:
    718: if (ipFlag->bomtype > 0)
    719:
    720: ConvTable = D2UAsciiTable;
    721:
    722:
    723: if ((ipFlag->ConvMode > CONVMODE_7BIT) && (ipFlag->verbose)) { /* not ascii or 7bit */
    724:
    725: d2u_fprintf(stderr, "%s: ", progname);
    726:
    727: d2u_fprintf(stderr, _("using code page %d. "), ipFlag->ConvMode);
    728:
    729: }
    730:
    731:
    732: /* CR-LF -> LF */
    733:
    734: /* LF -> LF, in case the input file is a Unix text file */
    735:
    736: /* CR -> CR, in dos2unix mode (don't modify Mac file) */
    737:
    738: /* CR -> LF, in Mac mode */
    739:
    740: /* x0a = Newline/Line Feed (LF) */
    741:
    742: /* x0d = Carriage Return (CR) */
    743:
    744:
    745: switch (ipFlag->FromToMode) {
    746:
    747: case FROMTO_DOS2UNIX: /* dos2unix */
    748:
    749: while ((TempChar = fgetc(ipInF)) != EOF) { /* get character */
    750:
    751: if ((ipFlag->Force == 0) &&
    752:
    753: (TempChar < 32) &&
    754:
    755: (TempChar != 'x0a') && /* Not an LF */
    756:
    757: (TempChar != 'x0d') && /* Not a CR */
    758:
    759: (TempChar != 'x09') && /* Not a TAB */
    760:
    761: (TempChar != 'x0c')) { /* Not a form feed */
    762:
    763: RetVal = -1;
    764:
    765: ipFlag->status |= BINARY_FILE ;
    766:
    767: if (ipFlag->verbose) {
    768:
    769: if ((ipFlag->stdio_mode) && (!ipFlag->error)) ipFlag->error = 1;
    770:
    771: d2u_fprintf(stderr, "%s: ", progname);
    772:
    773: d2u_fprintf(stderr, _("Binary symbol 0x%02X found at line %u "),TempChar, line_nr);
    774:
    775: }
    776:
    777: break;
    778:
    779: }
    780:
    781: if (TempChar != 'x0d') {
    782:
    783: if (TempChar == 'x0a') /* Count all DOS and Unix line breaks */
    784:
    785: ++line_nr;
    786:
    787: if (fputc(ConvTable[TempChar], ipOutF) == EOF) {
    788:
    789: RetVal = -1;
    790:
    791: d2u_putc_error(ipFlag,progname);
    792:
    793: break;
    794:
    795: }
    796:
    797: } else {
    798:
    799: if (StripDelimiter( ipInF, ipOutF, ipFlag, TempChar, &converted, progname) == EOF) {
    800:
    801: RetVal = -1;
    802:
    803: break;
    804:
    805: }
    806:
    807: }
    808:
    809: }
    810:
    811: if ((TempChar == EOF) && ferror(ipInF)) {
    812:
    813: RetVal = -1;
    814:
    815: d2u_getc_error(ipFlag,progname);
    816:
    817: }
    818:
    819: break;
    820:
    821: case FROMTO_MAC2UNIX: /* mac2unix */
    822:
    823: while ((TempChar = fgetc(ipInF)) != EOF) {
    824:
    825: if ((ipFlag->Force == 0) &&
    826:
    827: (TempChar < 32) &&
    828:
    829: (TempChar != 'x0a') && /* Not an LF */
    830:
    831: (TempChar != 'x0d') && /* Not a CR */
    832:
    833: (TempChar != 'x09') && /* Not a TAB */
    834:
    835: (TempChar != 'x0c')) { /* Not a form feed */
    836:
    837: RetVal = -1;
    838:
    839: ipFlag->status |= BINARY_FILE ;
    840:
    841: if (ipFlag->verbose) {
    842:
    843: if ((ipFlag->stdio_mode) && (!ipFlag->error)) ipFlag->error = 1;
    844:
    845: d2u_fprintf(stderr, "%s: ", progname);
    846:
    847: d2u_fprintf(stderr, _("Binary symbol 0x%02X found at line %u "),TempChar, line_nr);
    848:
    849: }
    850:
    851: break;
    852:
    853: }
    854:
    855: if ((TempChar != 'x0d')) {
    856:
    857: if (TempChar == 'x0a') /* Count all DOS and Unix line breaks */
    858:
    859: ++line_nr;
    860:
    861: if(fputc(ConvTable[TempChar], ipOutF) == EOF) {
    862:
    863: RetVal = -1;
    864:
    865: d2u_putc_error(ipFlag,progname);
    866:
    867: break;
    868:
    869: }
    870:
    871: }
    872:
    873: else{
    874:
    875: /* TempChar is a CR */
    876:
    877: if ( (TempNextChar = fgetc(ipInF)) != EOF) {
    878:
    879: if (ungetc( TempNextChar, ipInF ) == EOF) { /* put back peek char */
    880:
    881: d2u_getc_error(ipFlag,progname);
    882:
    883: RetVal = -1;
    884:
    885: break;
    886:
    887: }
    888:
    889: /* Don't touch this delimiter if it's a CR,LF pair. */
    890:
    891: if ( TempNextChar == 'x0a' ) {
    892:
    893: if (fputc('x0d', ipOutF) == EOF) { /* put CR, part of DOS CR-LF */
    894:
    895: RetVal = -1;
    896:
    897: d2u_putc_error(ipFlag,progname);
    898:
    899: break;
    900:
    901: }
    902:
    903: continue;
    904:
    905: }
    906:
    907: }
    908:
    909: if (fputc('x0a', ipOutF) == EOF) { /* MAC line end (CR). Put LF */
    910:
    911: RetVal = -1;
    912:
    913: d2u_putc_error(ipFlag,progname);
    914:
    915: break;
    916:
    917: }
    918:
    919: converted++;
    920:
    921: line_nr++; /* Count all Mac line breaks */
    922:
    923: if (ipFlag->NewLine) { /* add additional LF? */
    924:
    925: if (fputc('x0a', ipOutF) == EOF) {
    926:
    927: RetVal = -1;
    928:
    929: d2u_putc_error(ipFlag,progname);
    930:
    931: break;
    932:
    933: }
    934:
    935: }
    936:
    937: }
    938:
    939: }
    940:
    941: if ((TempChar == EOF) && ferror(ipInF)) {
    942:
    943: RetVal = -1;
    944:
    945: d2u_getc_error(ipFlag,progname);
    946:
    947: }
    948:
    949: break;
    950:
    951: default: /* unknown FromToMode */
    952:
    953: ;
    954:
    955: #if DEBUG
    956:
    957: d2u_fprintf(stderr, "%s: ", progname);
    958:
    959: d2u_fprintf(stderr, _("program error, invalid conversion mode %d "),ipFlag->FromToMode);
    960:
    961: exit(1);
    962:
    963: #endif
    964:
    965: }
    966:
    967: if ((RetVal == 0) && (ipFlag->verbose > 1)) {
    968:
    969: d2u_fprintf(stderr, "%s: ", progname);
    970:
    971: d2u_fprintf(stderr, _("Converted %u out of %u line breaks. "),converted, line_nr -1);
    972:
    973: }
    974:
    975: return RetVal;
    976:
    977: }
    978:
    979:
    980:
    981: int main (int argc, char *argv[])
    982:
    983: {
    984:
    985: /* variable declarations */
    986:
    987: char progname[9];
    988:
    989: CFlag *pFlag;
    990:
    991: char *ptr;
    992:
    993: char localedir[1024];
    994:
    995: # ifdef __MINGW64__
    996:
    997: int _dowildcard = -1; /* enable wildcard expansion for Win64 */
    998:
    999: # endif
    1000:
    1001: int argc_new;
    1002:
    1003: char **argv_new;
    1004:
    1005:
    1006: progname[8] = '';
    1007:
    1008: strcpy(progname,"dos2unix");
    1009:
    1010:
    1011: #ifdef ENABLE_NLS
    1012:
    1013: ptr = getenv("DOS2UNIX_LOCALEDIR");
    1014:
    1015: if (ptr == NULL)
    1016:
    1017: strcpy(localedir,LOCALEDIR);
    1018:
    1019: else {
    1020:
    1021: if (strlen(ptr) < sizeof(localedir))
    1022:
    1023: strcpy(localedir,ptr);
    1024:
    1025: else {
    1026:
    1027: d2u_fprintf(stderr,"%s: ",progname);
    1028:
    1029: d2u_ansi_fprintf(stderr, "%s", _("error: Value of environment variable DOS2UNIX_LOCALEDIR is too long. "));
    1030:
    1031: strcpy(localedir,LOCALEDIR);
    1032:
    1033: }
    1034:
    1035: }
    1036:
    1037: #endif
    1038:
    1039:
    1040: #if defined(ENABLE_NLS) || (defined(D2U_UNICODE) && !defined(__MSDOS__) && !defined(_WIN32) && !defined(__OS2__))
    1041:
    1042: /* setlocale() is also needed for nl_langinfo() */
    1043:
    1044: setlocale (LC_ALL, "");
    1045:
    1046: #endif
    1047:
    1048:
    1049: #ifdef ENABLE_NLS
    1050:
    1051: bindtextdomain (PACKAGE, localedir);
    1052:
    1053: textdomain (PACKAGE);
    1054:
    1055: #endif
    1056:
    1057:
    1058:
    1059: /* variable initialisations */
    1060:
    1061: pFlag = (CFlag*)malloc(sizeof(CFlag));
    1062:
    1063: if (pFlag == NULL) {
    1064:
    1065: d2u_fprintf(stderr, "dos2unix:");
    1066:
    1067: d2u_ansi_fprintf(stderr, " %s ", strerror(errno));
    1068:
    1069: return errno;
    1070:
    1071: }
    1072:
    1073: pFlag->FromToMode = FROMTO_DOS2UNIX; /* default dos2unix */
    1074:
    1075: pFlag->keep_bom = 0;
    1076:
    1077:
    1078: if ( ((ptr=strrchr(argv[0],'/')) == NULL) && ((ptr=strrchr(argv[0],'\')) == NULL) )
    1079:
    1080: ptr = argv[0];
    1081:
    1082: else
    1083:
    1084: ptr++;
    1085:
    1086:
    1087: if ((strcmpi("mac2unix", ptr) == 0) || (strcmpi("mac2unix.exe", ptr) == 0)) {
    1088:
    1089: pFlag->FromToMode = FROMTO_MAC2UNIX;
    1090:
    1091: strcpy(progname,"mac2unix");
    1092:
    1093: }
    1094:
    1095:
    1096: #ifdef D2U_UNIFILE
    1097:
    1098: /* Get arguments in wide Unicode format in the Windows Command Prompt */
    1099:
    1100: wchar_t **wargv;
    1101:
    1102: char ***argv_glob;
    1103:
    1104:
    1105: /* This does not support wildcard expansion (globbing) */
    1106:
    1107: wargv = CommandLineToArgvW(GetCommandLineW(), &argc);
    1108:
    1109:
    1110: argv_glob = (char ***)malloc(sizeof(char***));
    1111:
    1112: if (argv_glob == NULL) {
    1113:
    1114: d2u_fprintf(stderr, "%s:", progname);
    1115:
    1116: d2u_ansi_fprintf(stderr, " %s ", strerror(errno));
    1117:
    1118: return errno;
    1119:
    1120: }
    1121:
    1122: /* Glob the arguments and convert them to UTF-8 */
    1123:
    1124: argc_new = glob_warg(argc, wargv, argv_glob, pFlag, progname);
    1125:
    1126: argv_new = *argv_glob;
    1127:
    1128: #else
    1129:
    1130: argc_new = argc;
    1131:
    1132: argv_new = argv;
    1133:
    1134: #endif
    1135:
    1136:
    1137: #ifdef D2U_UNICODE
    1138:
    1139: return parse_options(argc_new, argv_new, pFlag, localedir, progname, PrintLicense, ConvertDosToUnix, ConvertDosToUnixW);
    1140:
    1141: #else
    1142:
    1143: return parse_options(argc_new, argv_new, pFlag, localedir, progname, PrintLicense, ConvertDosToUnix);
    1144:
    1145: #endif
    1146:
    1147: }
    1148:

  • 相关阅读:
    代码的测试 生产 开关 一键切换 开关
    iot表输出按主键列排序,heap表不是
    iot表输出按主键列排序,heap表不是
    iot 表主键存放所有数据,且按数据插入顺序排序
    iot 表主键存放所有数据,且按数据插入顺序排序
    iot表和heap表排序规则不同
    iot表和heap表排序规则不同
    Oracle 排序规则
    Oracle 排序规则
    perl 异步超时 打印错误
  • 原文地址:https://www.cnblogs.com/liujiacai/p/8283052.html
Copyright © 2011-2022 走看看