简体   繁体   中英

Replace string '\n' (not 'end of line') in bash script

There is \\n string in my file.

Contents of the file source.txt is only one row with text (plus enter at end of first line):

I want to replace only substring \nconsisting of characters \\ and n

You can see \\n substring inside before "consisting" word. I want to replace this substring with substring \\n and some ident spaces. My script is in file script.sh :

#!/bin/bash

ident="         "
rep_old="\n"
rep_new="\n$ident"

FILE=source.txt
while read line
do
  echo -e "$line"
  echo -e "NEW: ${line//$rep_old/$rep_new}"
done < $FILE

Actual output after call script.sh from bash (my os is Windows):

I want to replace only substring nconsisting of characters \ and n
NEW: I wa
         t to replace o
         ly substri
         g
         co
         sisti
         g of characters \ a
         d

But I want to replace only one \\n . I tried also use rep_old="\\\\n" but without success. What is correct way to achieve this two variants of result?

1: I want to replace only substring \\n consisting of characters \\\\ and n

2: I want to replace only substring consisting of characters \\\\ and n

What I try based to yours answers:

A: rep_old="\\\\\\\\n"

A: result:

I want to replace only substring nconsisting of characters \ and n
NEW: I want to replace only substring nconsisting of characters \ and n

This is to do with 'double escaping', happening at variable set time AND at use time consider this:

$ echo "\\n"
\n

$ x="\\n"
$ echo $x
\n

so even if I escape n with \\\\ on creation on use its \\n

try:

$ rep_old="\\\\n"

which gives

$ echo $rep_old
\\n

UPDATED Sorry you have a second problem, which is:

while read line <-- this is already eating the \n as it is reading that as an escape
do
  echo -e "$line"

see this: sh read command eats slashes in input?

try this:

while read -r line

giving:

I want to replace only substring
consisting of characters \ and n
NEW: I want to replace only substring
         consisting of characters \ and n

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM