Thursday, April 28, 2022

[SOLVED] sed replace with backslash, double quote, single quote

Issue

Can you give the sed command that will find \" and replace with \\' in a file.

For example line:

LOG_FN=\"file_name\"

will become

LOG_FN=\\'file_name\\'

By using this template:

sed -i 's/old-text/new-text/g' input.txt

I tried following sed commands:

sed -i 's/\\\"/\\\\\'/g' input.txt

sed -i "s/\\\"/\\\\'/g" input.txt

Unfortunately they fail because what I am looking for is a string substitution for \" while commands I tried change individual " characters.


Solution

You can't escape a single quote inside single quotes. Your second attempt needs more backslashes: Remember, inside double quotes, the shell processes one layer of backslashes, so you have to double each backslash which should make it through to sed.

sed "s/\\\\\"/\\\\\\\\'/g" input.txt

After the shell has processed the double-quoted string, the script which ends up being executed is

s/\\"/\\\\'/g

where the first pair of backslashes produce a literal backslash in the matching regex, and each pair of backslashes in the replacement produce one literal backslash in the output.

Demo: https://ideone.com/XqfwbV



Answered By - tripleee
Answer Checked By - Cary Denson (WPSolving Admin)