l i n u x - u s e r s - g r o u p - o f - d a v i s
L U G O D
 
Next Meeting:
July 21: Defensive computing: Information security for individuals
Next Installfest:
TBD
Latest News:
Jul. 4: July, August and September: Security, Photography and Programming for Kids
Page last updated:
2011 Jun 23 15:37

The following is an archive of a post made to our 'vox-tech mailing list' by one of its subscribers.

Report this post as spam:

(Enter your email address)
Re: [vox-tech] Problems with missing 'missing' file
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [vox-tech] Problems with missing 'missing' file




On Wed, 22 Jun 2011, Rick Moen wrote:

> Quoting Eric Lin (notapplicable.haha@gmail.com):
>
>> On Wed, Jun 22, 2011 at 03:43:54PM -0700, Cam Ellison wrote:
>>> I'm trying to compile a firmware flashing app (I have a MultiTech modem
>>> with a motorboating problem, and the firmware upgrade is said to be the
>>> answer) and keep running into the same error.  The app was developed for
>>> OSX, but the notes say it will run on Linux.
>>
>>> I have seen a suggestion that running dos2unix will deal with those
>>> $'\r' lines, but dos2unix thinks it's a binary file.
>>
>> I downloaded the source for this app and ran dos2unix on all the files.
>> Afterward, I had to modify a few of the source files' headers to get it
>> to actually compile. Also, I have automake-1.11, but make wanted
>> automake-1.10 and aclocal-1.10, so I just made symlinks in my ~/bin
>> folder.
>
> You know, it's really worthwhile getting to know how to do
> search/replace for such problems within vim.  For one thing, if you try
> such a change and it doesn't seem to have worked correctly, you can just
> do 'u' to undo, and try to refine your change.
>
> In this case, something like
>
> :%s/\r//g
>
> is probably all you needed.  That's
>
> :  enters ex-type command mode
> %  sets scope to all lines
> s  search & replace
> /  delimiter ahead of spec to search for
> \r spec to search for
> /  delimiter behind spec to search for and ahead of replacement spec
> /  delimiter behind replacement spec (i.e., replacement spec is null, here)
> g  and make the change globally, not just once.
>
> You can of course do the same operation in 'sed', but doing it inside
> the vim buffer gives you that ever-handy quick reversion.
>

Assuming that the \r is actually carriage return (and not a literal string 
consisting of backslash and the letter r) and that this was originally an 
older Mac formated file, you probably don't want to remove \r. Older Mac 
files only have a carriage return to mark the end of line and do not have 
a line feed (\n, the end-of-line delimiter on Unix/Linux). So if you 
remove the carriage returns on an old Mac file, you end up with one very 
long line.

Better to check if there are line feeds to decide if you need to remove 
the carriage returns or replace them with line feeds. You'll know pretty 
quickly after opening it in vim if there's line feeds or not. If the file 
appears as one big long line with ^M where line breaks should be, there's 
no line feeds and you'll need to replace \r with \n.

There's a couple ways to go about replacing. The vim substitute command is 
actually a little counter-intuitive in this case. In the search field of 
the substitute command, \r means carriage return and \n means line feed, 
but, in the replacement field, \r means "new line" for the current file 
format and \n means the null byte. So your substitute command should 
actually look like this (which seems odd at first glance if you don't 
know the difference between the special strings in both fields):

:%s/\r/\r/g

If you're using vim and it understands the Mac file format, you can just 
give the following:

:e ++ff=mac

My favorite of course is to use tr:

cat <filename> | tr '\r' '\n' > <filename>

Or you can just use dos2unix. If you have a large number of files to 
convert, dos2unix (or writing your own script to parse the source 
directory and call tr on each file) works well.
_______________________________________________
vox-tech mailing list
vox-tech@lists.lugod.org
http://lists.lugod.org/mailman/listinfo/vox-tech



LinkedIn
LUGOD Group on LinkedIn
Sign up for LUGOD event announcements
Your email address:
facebook
LUGOD Group on Facebook
'Like' LUGOD on Facebook:

Hosting provided by:
Sunset Systems
Sunset Systems offers preconfigured Linux systems, remote system administration and custom software development.

LUGOD: Linux Users' Group of Davis
PO Box 2082, Davis, CA 95617
Contact Us

LUGOD is a 501(c)7 non-profit organization
based in Davis, California
and serving the Sacramento area.
"Linux" is a trademark of Linus Torvalds.

Sponsored in part by:
O'Reilly and Associates
For numerous book donations.