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命令的帮助信息

[[email protected] myscript]# man dos2unix
 

[[email protected] 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: [[email protected] 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: [[email protected] myscript]# dos2unix test.sh 

  13: dos2unix: converting file test.sh to UNIX format ...

  14: [[email protected] 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: [[email protected] myscript]# dos2unix -n dosfile linuxfile
   2: dos2unix: converting file dosfile to file linuxfile in UNIX format ...

   3: [[email protected] myscript]# cat -v dosfile 

   4: it is a windows dos file^M

   5: you should convert to unix&linux format^M

   6: [[email protected] myscript]# cat -v linuxfile 

   7: it is a windows dos file

   8: you should convert to unix&linux format

   9: [[email protected] myscript]# 

5:保持文件时间戳不变

   1: [[email protected] myscript]# ls -lrt dosfile 
   2: -rw-r--r-- 1 root root 67 Dec 26 11:46 dosfile

   3: [[email protected] myscript]# dos2unix dosfile 

   4: dos2unix: converting file dosfile to UNIX format ...

   5: [[email protected] myscript]# ls -lrt dosfile 

   6: -rw-r--r-- 1 root root 65 Dec 26 11:58 dosfile

   7: [[email protected] myscript]# dos2unix -k dosfile 

   8: dos2unix: converting file dosfile to UNIX format ...

   9: [[email protected] myscript]# ls -lrt dosfile 

  10: -rw-r--r-- 1 root root 65 Dec 26 11:58 dosfile

6:静默模式格式化文件

   1: [[email protected] myscript]# unix2dos -q dosfile 
   2:  

   3: [[email protected] 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 ([email protected])

  74: 

  75: *  == 1.1 == 1994.12.20 == Benjamin Lin ([email protected])

  76: 

  77: *     Cleaned up for Borland C/C++ 4.02

  78: 

  79: *  == 1.2 == 1995.03.16 == Benjamin Lin ([email protected])

  80: 

  81: *     Modified to more conform to UNIX style.

  82: 

  83: *  == 2.0 == 1995.03.19 == Benjamin Lin ([email protected])

  84: 

  85: *     Rewritten from scratch.

  86: 

  87: *  == 2.1 == 1995.03.29 == Benjamin Lin ([email protected])

  88: 

  89: *     Conversion to SunOS charset implemented.

  90: 

  91: *  == 2.2 == 1995.03.30 == Benjamin Lin ([email protected])

  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. \r to \n conversion

 100: 

 101: * Bernd Johannes Wuebben, [email protected]

 102: 

 103: * Wed Feb  4 19:12:58 EST 1998

 104: 

 105: *

 106: 

 107: * Added extra newline if ^M occurs

 108: 

 109: * Christian Wurll, [email protected]

 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\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_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\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 DEBUG

 596:  

 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: #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.\n"), 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.\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 DEBUG

 956:  

 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: #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.\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: # endif

1000:  

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_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.\n"));

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\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: 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\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: #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:  

时间: 2024-11-04 17:59:12

Linux命令学习总结:dos2unix - unix2dos的相关文章

(转)Linux命令学习总结:dos2unix - unix2dos

Linux命令学习总结:dos2unix - unix2dos 命令简介: 原文:http://www.cnblogs.com/kerrycode/p/5077969.html dos2unix是将Windows格式文件转换为Unix.Linux格式的实用命令.Windows格式文件的换行符为\r\n ,而Unix&Linux文件的换行符为\n. dos2unix命令其实就是将文件中的\r\n 转换为\n. 而unix2dos则是和dos2unix互为孪生的一个命令,它是将Linux&Un

Linux命令学习Day1

一直想学习Linux命令行,但是总是没有坚持.[Linux命令学习]系列博客将会记录我学习命令行的点点滴滴. 今天自己学习的4个命令: uname -- 查看系统信息 find -- 查找命令 dos2unix – Dos文件转换成Unix文件 cat -- 显示命令 下面简要描述下这几个命令. uname常用的几个选项: -a(打印所有信息) -s(内核名字) -r(内核版本) find功能强大,常用的语法格式: 路径 -- 在find命令后开始搜索的路径,若未指定则默认从当前路径开始搜索 -

Linux命令学习之—每天发一个命令—mkdir

Linux命令学习之-每天发一个命令-mkdir mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录. 1.命令格式: mkdir [选项] 目录... 2.命令功能: 通过 mkdir 命令可以实现在指定位置创建以 DirName(指定的文件名)命名的文件夹或目录.要创建文件夹或目录的用户必须对所创建的文件夹的父文件夹具有写权限.并且,所创建的文件夹(目录)不能与其父目录(即父文件夹)中的文件名重名,即同一个目录下不能

linux命令学习-首篇

在home目录的.bashrc 添加了如下逻辑,目的是可以"每日"学习或复习linux命令 # 学习linux命令 # echo "Did you know that:"; whatis $(ls /bin | shuf -n 1) cowsay -f $(ls /usr/share/cowsay/cows | shuf -n 1 | cut -d. -f1) $(whatis $(ls /bin) 2>/dev/null | shuf -n 1) 效果图:

Linux命令学习总结: file命令

http://www.cnblogs.com/kerrycode/p/3806618.html Linux命令学习总结: file命令 命令简介: 该命令用来识别文件类型,也可用来辨别一些文件的编码格式.它是通过查看文件的头部信息来获取文件类型,而不是像Windows通过扩展名来确定文件类型的. 执行权限 :All User 指令所在路径:/usr/bin/file 命令语法: file [ -bchikLnNprsvz ] [ -f namefile ] [ -F separator ] [

每日linux命令学习-引用符号(反斜杠\,单引号&#39;&#39;,双引号&quot;&quot;)

引用符号在解析器中保护特殊元字符和参数扩展,其使用方法有3种:反斜杠(\),单引号(''),双引号(""). 单引号和双引号必须匹配使用,均可在解析器中保护特殊元字符和通配符,但是单引号(硬转义)主要用于信息的原样输出,防止任何变量的扩展,双引号(软转义)允许变量扩展.转义符和命令替换.单引号保护双引号,双引号保护单引号. 1. 反斜杠 反斜杠通过解析器将1个字符转化为引用符号或转义. 1)在单引号内使用反斜杠,反斜杠不会被解析,保持原样输出. 2)在双引号内使用反斜杠,主要用于美元符

Linux命令学习笔记目录

Linux命令学习笔记目录 最近正在使用,linux,顺便将用到的命令整理了一下. 一. 文件目录操作命令: 0.linux命令学习笔记(0):man 命令 1.linux命令学习笔记(1):ls命令 2.linux命令学习笔记(2):cd命令 3.linux命令学习笔记(3):pwd命令 4.linux命令学习笔记(4):mkdir命令 5.linux命令学习笔记(5):rm 命令 6.linux命令学习笔记(6):rmdir 命令 7.linux命令学习笔记(7):mv命令 8.linux命

Linux命令学习总结:rm命令

命令简介: 该命令用来删除Linux系统中的文件或目录.通常情况下rm不会删除目录,你必须通过指定参数-r或-R来删除目录.另外rm通常可以将该文件或目录恢复(注意,rm删除文件其实只是将指向数据块的索引点(information nodes)释放,只要不被覆盖,数据其实还在硬盘上.如果想要保证文件的内容无法复原,可以使用命令shred . 另外一般还是要慎用rm -rf *这样的命令. 执行权限 :All User 指令所在路径:/bin/rm 命令语法: rm [OPTION]... FIL

Linux命令学习总结:reboot命令

命令简介: 该命令用来重启Linux系统.相当于Windows系统中的restart命令. 命令语法: /sbin/reboot [-n] [-w] [-d] [-f] [-i] 或 reboot [-n] [-w] [-d] [-f] [-i] 命令参数: 参数 长参数 描叙 -d 重新启动时不把数据写入记录文件/var/tmp/wtmp -f 强制重新开机,不调用shutdown指令的功能. -h 在系统关机或poweroff之前,将所有的硬盘处于待机模式 -i 关闭网络设置之后再重新启动系

Linux命令学习总结&mdash;&mdash;file

命令简介: 该命令用来识别文件类型,也可用来辨别一些文件的编码格式.它是通过查看文件的头部信息来获取文件类型,而不是像Windows通过扩展名来确定文件类型的. 执行权限 :All User 指令所在路径:/usr/bin/file 命令语法: file [ -bchikLnNprsvz ] [ -f namefile ] [ -F separator ] [ -m magicfiles ] file ... 命令参数: 下表列出了部分常用的参数. 参数 长参数 描叙 -b 列出文件辨识结果时,