Bash - How to replace line that includes '/' characters [duplicate] - regex

This question already has answers here:
sed search and replace strings containing / [duplicate]
(2 answers)
Closed 7 years ago.
I'm trying to replace a line in a csv file that includes '/' characters in one of its columns. Is there a way to replace it with sed? I'm using two variables: one to store the line to replace and another one for the string that will replace it.
sed -i "/s/${CURRENTLINE}/${NEWLINE}/g"
example of the line format:
907;name;2015;4444;DOC;44;user;06/03/2015
Thanks in advance!

Your sed command starts with s and you can use an alternate reges delimiter:
sed -i "s~${CURRENTLINE}~${NEWLINE}~g" file.csv

Related

RegEx - How to extract second matches using grep [duplicate]

This question already has answers here:
Parsing the first column of a csv file to a new file
(4 answers)
Closed 3 years ago.
How to extract second numbers in this text using grep command in ubuntu.
14219,98.2,31-s,19225
39219,92.7,31-s,29225
39219,38.7,31-s,29225
ouput desired :
98.2
92.7
38.7
Thanks
Possibly a duplicate of this post: Parsing the first column of a csv file to a new file
In your case, you can use cat file.txt | cut -d, -f2 to extract the second column.

Matching negative and positive pattern in one sed [duplicate]

This question already has answers here:
Replace All Lines That Do Not Contain Matched String
(4 answers)
Closed 3 years ago.
I have a problem with making sed command, which gonna change lines, where =sometext= occurs and change it to another pattern, but will not do it when https occcurs in that line. I have no idea how I should change this command:sed -i 's/=\([^=]*\)=/{{\1}}/g'
You'll want to read the sed manual about matching lines: https://www.gnu.org/software/sed/manual/sed.html chapter 4:
The following command replaces the word ‘hello’ with ‘world’ only in lines not containing the word ‘apple’:
sed '/apple/!s/hello/world/' input.txt > output.txt
Use multiple blocks, e.g.:
sed '/=sometext=/ { /https/b; s/.../.../; }'

Regular expression not matching correctly in sed command [duplicate]

This question already has answers here:
Why doesn't `\d` work in regular expressions in sed? [duplicate]
(3 answers)
Closed 5 years ago.
I am trying to replace some character strings using sed in batch console. My input consists in a file with lines like these:
$ head qiimetax_sorted.txt
A61579.1.1437
D_0__Bacteria;D_1__Thermotogae;D_2__Thermotogae;D_3__Thermotogales;
D_4__Fervidobacteriaceae;D_5__Fervidobacterium;Ambiguous_taxa;D_7__;
D_8__;D_9__;D_10__;D_11__;D_12__;D_13__;D_14__
AAAA02020712.626.2096
D_0__Bacteria;D_1__Proteobacteria;D_2__Alphaproteobacteria;D_3__Rhizobiales;
D_4__Bradyrhizobiaceae;D_5__uncultured;D_6__Oryza sativa
Indica Group (long-grained rice);D_7__;D_8__;D_9__;D_10__;D_11__;D_12__;
D_13__;D_14__
Now I'm trying to erase the 'D_number__' string before the names with this sed command and it is not replacing anything:
sed -r 's/D_\d+__//g' qiimetax_sorted.txt > qiimesed.txt
Any idea of which is the problem?
Thanks!
Your regex syntax is perl like.
So if you want to keep it :
perl -pe 's/D_\d+__//g' qiimetax_sorted.txt > qiimesed.tx
or with sed :
sed -r 's/D_[0-9]+__//g' qiimetax_sorted.txt > qiimesed.tx

Replace string variable with string variable using Sed [duplicate]

This question already has answers here:
"sed" special characters handling
(3 answers)
Is it possible to escape regex metacharacters reliably with sed
(4 answers)
Escape a string for a sed replace pattern
(17 answers)
Closed 5 years ago.
I have a file called ethernet containing multiple lines. I have saved one of these lines as a variable called old_line. The contents of this variable looks like this:
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="2r:11:89:89:9g:ah", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
I have created a second variable called new_line that is similar to old_line but with some modifications in the text.
I want to substitute the contents of old_line with the contents of new_line using sed. So far I have the following, but it doesn't work:
sed -i "s/${old_line}/${new_line}/g" ethernet
You need to escape your oldline so that it contains no regex special characters, luckily this can be done with sed.
old_line=$(echo "${old_line}" | sed -e 's/[]$.*[\^]/\\&/g' )
sed -i -e "s/${old_line}/${new_line}/g" ethernet
Since ${old_line} contains many regex special metacharacters like *, ? etc therefore your sed is failing.
Use this awk command instead that uses no regex:
awk -v old="$old_line" -v new="$new_line" 'p=index($0, old) {
print substr($0, 1, p-1) new substr($0, p+length(old)) }' ethernet

Escape a path for sed search pattern [duplicate]

This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
sed, foward slash in quotes
In my bash script I have a path string, which I should use in sed pattern.
SRC_PATH="$PWD"
sed "s/<SRC_PATH>/$SRC_PATH/g" template.sh > replaced.sh
How can I escape the $SRC_PATH string so it would be safely accepted by sed as a literal replacement?
You need not escape it. Just use other delimiter:
sed "s#<SRC_PATH>#$SRC_PATH#g" template.sh > replaced.sh
But you must be sure that SRC_PATH contains no # (or other symbol if you choose it).
Use s%$OLDPATH%$NEWPATH%. You can choose your delimiter. If % is too dangerous, consider Control-A instead.