What's wrong my sed?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting What's wrong my sed?
# 8  
Old 07-08-2012
Quote:
Originally Posted by yanglei_fage
Code:
$ cat ./xx.sh 
#!/bin/bash
while read line
do
    sed -n '/${line}/p' ./file2
done < ./file1

You did not show the desired output for the sample data, so I'm assuming that your goal is to print out each line in file2 that contains a line in file1 as a substring.

Code:
grep -Ff file1 file2

Regards,
Alister

---------- Post updated at 12:02 PM ---------- Previous update was at 11:58 AM ----------

Quote:
Originally Posted by yanglei_fage
"The sed command will not work because of the / delimiter"
if I change the sed to " sed -i '%${line}%d' file2" it still get error
sed: -e expression #1, char 1: unknown command: `%'
To use a different delimiter for an address, the opening delimiter must be backslash-escaped (this is not necessary when using a different delimiter to delimit the components of a substitute, s, command).

However, any sed solution will treat literal text as a regular expression. That is a very poor approach. Each . in file1 will match any character at all. Each * will allow the preceding character to occur an arbitrary number of times, or to not occur at all. And so it goes with all regular expression metacharacters.

Regards,
Alister

Last edited by alister; 07-08-2012 at 01:22 PM..
# 9  
Old 07-08-2012
OW yes you went back to using single quotes, double quotes is what you would need..
try:
Code:
sed -i "\%${line}%d"

It would be inefficient though..

The awk is not producing any output since every record of file2 is contained in file1 so the output should be empty. Otherwise, what do you expect the output (you did not explicitly specify) to be?
# 10  
Old 07-08-2012
Quote:
Originally Posted by Scrutinizer
OW yes you went back to using single quotes, double quotes is what you would need..
try:
Code:
sed -i "\%${line}%d"

It would be inefficient though..

The awk is not producing any output since every record of file2 is contained in file1 so the output should be empty. Otherwise, what do you expect the output (you did not explicitly specify) to be?

I remind it should be sed -i "%${line}%d" (not work) but I see you add \ before the first % and it works

Lei


---------- Post updated at 10:20 AM ---------- Previous update was at 10:06 AM ----------

this sed still can't work in some cases.
I want to delete the file2'line when the line contains the content of file1

file2

Code:
3gdgdgd python: regenerate plat-linux2/*.py
34sfddf python: depend on bzip2
fdererf the good test


file1
Code:
python: regenerate plat-linux2/*.py

i want to get below for file2

Code:
34sfddf python: depend on bzip2
fdererf the good test

with below code it still not work
Code:
#!/bin/bash
#s=`cat file1 |awk -F "zzzzzz" '{print $2}' |sed -n "${n}p"`
while read line
do
sed -i "\%${line}%d" file2
done < file1

# 11  
Old 07-08-2012
Quote:
Originally Posted by yanglei_fage
this sed still can't work in some cases.
sed cannot be made to work correctly, unless you escape every single basic regular expression metacharacter. And, since some characters are special in some situations and not in others, you cannot naively place a backslash before every one of them; you'll have to build a basic regular expression lexer and parser. Or ...

You should stop treating literal text as regular expressions. Use awk, grep, or some other tool that can treat arbitrary input as a literal string.

Here's another line in your sample data that will cause a problem:
Code:
[e]glibc-package.inc: fix providers for libsegfault and other

As a regular expression, it won't match itself (because the [e] won't match the brackets themselves).

Regards,
Alister
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Same sed code prints(p) correct, but writtes(w) wrong output

Dear all, I am using sed as an alternative to grep in order to get a specific line from each of multiple files located in the same directory. I am using sed because it prints the lines in the correct order (unlike grep). When I write sed code that prints out the output I get it correct, but... (1 Reply)
Discussion started by: JaNaJaNa
1 Replies

2. Post Here to Contact Site Administrators and Moderators

Whether anything went wrong ?

Hi could see all the post with this old color scheme ( legacy (dark) vBulletin color scheme (unsupported)) except this post, please look at the screenshot . Looks like url parsing also some problem is there getting "Page not found" error. -- Akshay --edit-- screenshot is there in album... (18 Replies)
Discussion started by: Akshay Hegde
18 Replies

3. UNIX for Dummies Questions & Answers

What is wrong with: echo $PATH | sed s/:/\\n/g

Hello all! I am on Mac (10.8.4) and my shell tcsh (man says version: Astron 6.17.00). Just to precise my tcsh: echo $LC_CTYPE UTF-8 I want to replace all ':' with a new line, to get all paths on one line. I don't find a way to make my shell accept the "\n" My start was: echo... (17 Replies)
Discussion started by: marek
17 Replies

4. Shell Programming and Scripting

Why result is wrong here ? whether break statement is wrong ?

Hi ! all I am just trying to check range in my datafile pls tell me why its resulting wrong admin@IEEE:~/Desktop$ cat test.txt 0 28.4 5 28.4 10 28.4 15 28.5 20 28.5 25 28.6 30 28.6 35 28.7 40 28.7 45 28.7 50 28.8 55 28.8 60 28.8 65 28.1... (2 Replies)
Discussion started by: Akshay Hegde
2 Replies

5. Shell Programming and Scripting

What's wrong with my sed?

lyang0@lyang0-OptiPlex-755:~$ cat xx Settings for eth1: Supported ports: Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half... (11 Replies)
Discussion started by: yanglei_fage
11 Replies

6. Shell Programming and Scripting

SED to delete last word on line...what's wrong?

I have a line that gets pulled from a database that has a variable number of fields, fields can also be of a variable size. Each field has a variable number of spaces between them so there is no 'defined' delimiter. The LastData block is always a single word. What I want to do is delete the... (2 Replies)
Discussion started by: Bashingaway
2 Replies

7. UNIX for Dummies Questions & Answers

What is wrong in here ???

]#PATH=/usr/bin:/etc:/bin:/boot/grub:/boot/grup/bin: /boot/solaris/bin:/sbin:/usr/openwin/bin:/usr/5bin://usr/X11/bin:/usr/apache/bin:/usr/apache2/bin:/usr/appserver/bin:... (9 Replies)
Discussion started by: microbot
9 Replies

8. Shell Programming and Scripting

What am I doing wrong?

Trying to run a script as a different user (sudo userx inside the script) but after I call the script it just sits in memory until I <ctrl D>. If I do whoami before the <ctrl D> the system returns the userid that was invoked in the script. Is there any way to get around this behavior? TIA,... (3 Replies)
Discussion started by: gwfay
3 Replies

9. Shell Programming and Scripting

What's wrong with this sed command? delete & append

I want to write a sed command that does the following work: file: <a>asdfasdf<\s> <line>hello</line> <b>adf<\c> <b>tttttttt<\c> output: name=hello sed -e 's/^*//' -n -e '/<line>/s/<*>//gp;' -e 's/^/name="/g' file but I can not append "=" after getting the line with... (5 Replies)
Discussion started by: minifish
5 Replies

10. UNIX for Dummies Questions & Answers

am i wrong?

knew nothing about unix - linux untill a week ago when i started out to learn the basics. I think i'm aproaching unix wrong, i'm trying to compare unix with dos, searching similar commands. Did some great things for dumbass newbie like writing scripts to mount cdrom and floppy, that's the... (4 Replies)
Discussion started by: termiEEE
4 Replies
Login or Register to Ask a Question