Linux命令学习总结:dos2unix - unix2dos
2017-05-17 16:07
495 查看
Linux命令学习总结:dos2unix - unix2dos
命令简介:dos2unix是将Windows格式文件转换为Unix、Linux格式的实用命令。Windows格式文件的换行符为\r\n ,而Unix&Linux文件的换行符为\n. dos2unix命令其实就是将文件中的\r\n 转换为\n。
而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]#
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[/code]14:15: * --------16:17: *18:19: * Copyright (C) 2009-2015 Erwin Waterlander20:21: * Copyright (C) 1998 Christian Wurll22:23: * Copyright (C) 1998 Bernd Johannes Wuebben24: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 without32:33: * modification, are permitted provided that the following conditions34:35: * are met:36:37: * 1. Redistributions of source code must retain the above copyright38:39: * notice, this list of conditions and the following disclaimer.40:41: * 2. Redistributions in binary form must reproduce the above copyright42:43: * notice in the documentation and/or other materials provided with44:45: * the distribution.46:47: *48:49: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY50:51: * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE52:53: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR54:55: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE56:57: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR58:59: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT60:61: * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR62:63: * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,64:65: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE66:67: * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN68: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.0278: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 exists94:95: * conversion can not be completed properly.96:97: *98:99: * Added Mac text file translation, i.e. \r to \n conversion100:101: * Bernd Johannes Wuebben, wuebben@kde.org102:103: * Wed Feb 4 19:12:58 EST 1998104:105: *106:107: * Added extra newline if ^M occurs108:109: * Christian Wurll, wurll@ira.uka.de110:111: * Thu Nov 19 1998112: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_C126:127:128: #include "common.h"129:130: #include "dos2unix.h"131:132: # if (defined(_WIN32) && !defined(__CYGWIN__))133:134: #include <windows.h>135:136: #endif137:138: #ifdef D2U_UNICODE139:140: #if !defined(__MSDOS__) && !defined(_WIN32) && !defined(__OS2__) /* Unix, Cygwin */141:142: # include <langinfo.h>143:144: #endif145:146: #endif147:148:149: void PrintLicense(void)150:151: {152:153: printf("%s", _("\154:155: Copyright (C) 2009-2015 Erwin Waterlander\n\156:157: Copyright (C) 1998 Christian Wurll (Version 3.1)\n\158:159: Copyright (C) 1998 Bernd Johannes Wuebben (Version 3.0)\n\160:161: Copyright (C) 1994-1995 Benjamin Lin\n\162:163: All rights reserved.\n\n"));164:165: PrintBSDLicense();166:167: }168:169:170: #ifdef D2U_UNICODE171: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: #endif251:252:253: /* CUR NEXT254:255: 0xd(CR) 0xa(LF) => put LF if option -l was used256:257: 0xd(CR) ! 0xa(LF) => put CR258:259: 0xd(CR) EOF => put CR260: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 ipOutF343:344: * RetVal: 0 if success345:346: * -1 otherwise347:348: */349:350: #ifdef D2U_UNICODE351: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\n"),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\n"), 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 DEBUG596:597: d2u_fprintf(stderr, "%s: ", progname);598:599: d2u_fprintf(stderr, _("program error, invalid conversion mode %d\n"),ipFlag->FromToMode);600:601: exit(1);602:603: #endif604: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.\n"), converted, line_nr -1);616:617: }618:619: return RetVal;620:621: }622:623: #endif624:625:626: /* converts stream ipInF to UNIX format text and write to stream ipOutF627:628: * RetVal: 0 if success629:630: * -1 otherwise631: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.\n"), 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\n"),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\n"),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 DEBUG956:957: d2u_fprintf(stderr, "%s: ", progname);958:959: d2u_fprintf(stderr, _("program error, invalid conversion mode %d\n"),ipFlag->FromToMode);960:961: exit(1);962:963: #endif964: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.\n"),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: # endif1000:1001: int argc_new;1002:1003: char **argv_new;1004:1005:1006: progname[8] = '\0';1007:1008: strcpy(progname,"dos2unix");1009:1010:1011: #ifdef ENABLE_NLS1012: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.\n"));1030:1031: strcpy(localedir,LOCALEDIR);1032:1033: }1034:1035: }1036:1037: #endif1038: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: #endif1047:1048:1049: #ifdef ENABLE_NLS1050:1051: bindtextdomain (PACKAGE, localedir);1052:1053: textdomain (PACKAGE);1054:1055: #endif1056: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\n", 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: else1083: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_UNIFILE1097: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\n", 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: #else1129:1130: argc_new = argc;1131:1132: argv_new = argv;1133:1134: #endif1135:1136:1137: #ifdef D2U_UNICODE1138:1139: return parse_options(argc_new, argv_new, pFlag, localedir, progname, PrintLicense, ConvertDosToUnix, ConvertDosToUnixW);1140:1141: #else1142:1143: return parse_options(argc_new, argv_new, pFlag, localedir, progname, PrintLicense, ConvertDosToUnix);1144:1145: #endif1146:1147: }1148:
作者:潇湘隐者
相关文章推荐
- Linux命令学习总结:dos2unix - unix2dos
- Linux命令学习总结:dos2unix - unix2dos
- linux学习笔记--dos2unix命令
- iconv内容,convmv文件名,unix2dos,dos2unix文件格式转换,od/cut/wc/dd/diff/uniq/nice/du等命令,linux文件名乱码,文件名,文件内容,vim编码设置
- iconv内容,convmv文件名,unix2dos,dos2unix文件格式转换,od/cut/wc/dd/diff/uniq/nice/du等命令,linux文件名乱码,文件名,文件内容,vim编码设置
- Linux命令学习总结一
- Linux命令学习总结二
- Linux常用命令学习总结 - 用户管理类命令(1)
- 【Linux入门学习之】Linux关机命令总结
- LINUX 学习总结—基本框架,基本命令(2)
- Linux命令学习总结三
- 【Linux入门学习之】Linux关机命令总结
- Linux Shell 常用命令与目录分区的学习总结 (开始学习linux)
- Linux常用命令学习总结 - 日期时间安排类命令(3)
- Unix/linux进程及线程间同步技术总结【学习总结,请勿吐槽。。。】
- Linux网络编程基础之二--UDP --Unix学习总结之四
- dos2unix和unix2dos命令使用
- ubunto10.04的tofrodos不含dos2unix和unix2dos命令了
- Linux/Unix学习经验总结
- Linux常用命令学习总结 - 文件目录管理类命令(2)