Todd Schneider uses the following command in his NYC Taxi Data Analysis to prep a CSV file for PostresSQL.
sed $'s/\r$//' $filename | sed '/^$/d' | ...
The second sed command removes blank lines. What does the first one do?
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It only takes a minute to sign up.
Sign up to join this communityTodd Schneider uses the following command in his NYC Taxi Data Analysis to prep a CSV file for PostresSQL.
sed $'s/\r$//' $filename | sed '/^$/d' | ...
The second sed command removes blank lines. What does the first one do?
According to man bash
:
Words of the form $'string' are treated specially. The word expands to string, with backslash-escaped characters replaced as specified by the ANSI C standard. Backslash escape sequences, if present, are decoded as follows: \a alert (bell) \b backspace \e \E an escape character \f form feed \n new line \r carriage return \t horizontal tab \v vertical tab \\ backslash \' single quote \" double quote \? question mark \nnn the eight-bit character whose value is the octal value nnn (one to three digits) \xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits) \uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits) \UHHHHHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits) \cx a control-x character The expanded result is single-quoted, as if the dollar sign had not been present.
Consequently $'s/\r$//'
deletes an ASCII CR
at end of line. It's a crude way to convert Windows line endings to UNIX line endings.
sed
(and other similar utilities). Plain translations such as Cygwin won't work.
Oct 30, 2017 at 17:51
\r
at the end of the line. Looks doubtful, I see the most windows files withCRLF
at the end (not singleCR
)\r
. If the file contained CR line endings, sed would see the whole file as a single line.