Technology / Software /
05 Jan 2022
Replace last string in each line of text using 'sed'
One-liner to replace the last comma-space sequence in each line with a tab… useful to turn lists with dates separated by a comma into TSV for use in tables.
Bash
sed -E 's/(.*), /\1\t/' < inputfile > outputfile
N.B.: The second regular expression contains \1
(forward-slash, numeral one), not to be confused with \l
(forward-slash, lowercase letter L).
Example
If our input file looks like this:
Went to the library, June 10
Saw Jack, Jill, and Henry, June 11
Picked strawberries, June 13
Then by running the command above, we transform it into (after making tabs visible by piping the output through cat -T
):
Went to the library^IJune 10
Saw Jack, Jill, and Henry^IJune 11
Picked strawberries^IJune 13
Note that on the second line, where there are multiple commas, only the final comma-space sequence is replaced. This was particularly important when I was trying to do some ETL shenanigans with a poorly-escaped CSV file full of mixed text, dates, and financial data.