Help with sed-script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Help with sed-script
# 1  
Old 11-16-2015
Help with sed-script

Hi!

I really need some help and feedback with my sed-script below.

I want to find all HTML files and then remove everything before <body> and everything after </body>, including both tags. When the SED is done it should save the new content to a new file with the name "index.html_nobody" (just add "_nobody" to the filename).

The problem I got is "Syntax error: newline unexpected".

Theres a simple HTML page:
Code:
<!DOCTYPE html>
<html>
<body>

<img src="w3schools.jpg" alt="W3Schools.com" width="104" height="142">

</body>
</html>

The script should return only this line:
Code:
<img src="w3schools.jpg" alt="W3Schools.com" width="104" height="142">

Here's my script so far:

Code:
path="$1"

#!/bin/bash

find "$1" -type f -name "*.html" -o -name "*.htm" | while read -r filename; do
     echo -e "\nFound:\n""$files\n"

        if [ -e "$1" ]
then
                echo "Editing files"
                exec sh -c "$filename" | sed '0,/<body/ { /<body/! d ; /<body/ s/.*<body[^>]*>// } ; \|</body|,$ { \|</body|! d ; \|</body| s|</body.*|| }' ; > "{}_nobody"

else
        echo "File not found."
fi
done


Last edited by vbe; 11-16-2015 at 01:15 PM.. Reason: more code tags and icode
# 2  
Old 11-16-2015
You said:
Code:
exec sh -c "$filename" | sed ... etc...

I think you want to do your sed on the file, so either "cat" the file or use file as an argument to your sed.
This User Gave Thanks to cjcox For This Post:
# 3  
Old 11-16-2015
Thank you cjcox!!

Now I have the saving problem. It won't save the file with the new filename.
If the original filename is index.html the new filename should be index.html_nobody.

I have the code > "{}_nobody" but it won't work...
It saves the file to be named exactly {}_nobody but with no content...
# 4  
Old 11-16-2015
Change our output redirect to:
Code:
...... > "${filename}_nobody"

# 5  
Old 11-16-2015
Your output sample does not fit your spec; according to the spec, there should be an empty line before and after the source line, respectively.

How about
Code:
sed -n '/body/,/\/body/ {/\/*body/d;p}' file > index.html_nobody

# 6  
Old 11-16-2015
I got it all right now, but the output file is empty...

Code:
#!/bin/bash
path="$1"

find "$1" -type f -name "*.html" -o -name "*.htm" | while read -r filename; do
     echo -e "\nFound:\n""$filename\n"

	if [ -e "$1" ]
then
		echo "Editing files"
		cat "$filename" | sed '0,/<body/ { /<body/! d ; /<body/ s/.*<body[^>]*>// } ; \|</body|,$ { \|</body|! d ; \|</body| s|</body.*|| }' ; > "${filename}_nobody"

else
	echo "No files found."
fi
done

I got this output below, but it won't save it, just created a new file with correct filename but with no content...

Code:
Found:
/home/user1/test.html

Editing files


<img src="w3schools.jpg" alt="W3Schools.com" width="104" height="142">

# 7  
Old 11-16-2015
Quote:
Originally Posted by bash_
Code:
.
.
.
... s|</body.*|| }' ; > "${filename}_nobody"
.
.
.

That semicolon ends the sed, which then prints to stdout, and starts a new command (just redirection), which creates a new file.
This User Gave Thanks to RudiC For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

sed script help

I am having a file as stated below : File 1: ########################## idnd a integer 2; list 1 ; list2 ; chip top alist( .a(1) , .b(2) , .c(3) , .d(1) , .e(7) , .n(80), .d(1) , .g(7) , .n(80), .f(1) , .e(7) , .m(80)); lis 7 nfj ; jdjd kn; jsjd l ; (4 Replies)
Discussion started by: kshitij
4 Replies

2. Shell Programming and Scripting

sed script

I am beginner for Unix. I practicing unix shell script. I worked out some sed script example from internet. Everything fine. But in real unix environment, where sed script is mainly used.? Can anyone give some examples for the usage of sed script in real unix environment. It will be useful for... (1 Reply)
Discussion started by: gwgreen1
1 Replies

3. Homework & Coursework Questions

Sed script

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: Create a sed script that will display a list of all users in the /etc/passwd file that belong to the group... (0 Replies)
Discussion started by: lakers34kb
0 Replies

4. Shell Programming and Scripting

sed in script

I'm trying to write a simple script that replaces a string. The script works for uninterrupted strings, but as soon as sed encounters a space it stops reading the new string. I've tried double quotations in sed and backslashes before the $, however these don't work. Below is the script. Any help... (9 Replies)
Discussion started by: dsell002
9 Replies

5. UNIX for Dummies Questions & Answers

sed script

:rolleyes: I have a series of folders /temp/a /temp/b /temp/c In folders a, b, and c, I have files a1.txt..........a20.txt b1.txt..........b40.txt & c1.txt..........c60.txt Each file has the same data format :- Line... (2 Replies)
Discussion started by: grinder182533
2 Replies

6. Shell Programming and Scripting

sed script

how to convert the follow sed script file into a command line ? example: /^\.TS/,/^\.TE/{ /^$/p } I have tried the below but it is not working: # sed -n "/^\.TS/,/^\.TE/{/^$/p}" file file: 111 .TS 222 $333 << extract this line 444 .TE 555 (2 Replies)
Discussion started by: 3Gmobile
2 Replies

7. Shell Programming and Scripting

sed in a script

I am trying to run a sed command within a script to edit a file. I am trying to put the value of MYUSER into the sshd_config file. Instead of putting the value of the variable, MYUSER, it puts in the string ${MYUSER}. Anyone know a good solution to this? cat ${SSHD_CONFIG} | sed... (1 Reply)
Discussion started by: Mike_the_Man
1 Replies

8. Shell Programming and Scripting

Sed script

/\/\*/!b :x /\*\//!{ N bx } s/\/\*.*\*\/// This scipt should remove c like commnets /**/ i know what de last line does but i dont't know what the first lines do Can anyone explain please (3 Replies)
Discussion started by: clauchiorean
3 Replies

9. UNIX for Dummies Questions & Answers

help in sed script

I am having a shell script that connects to database half hourly and pulls out the backlog from some tables. Now that logfile is growing too big and I need to housekeep it! effectively I want to keep last 30 days data in that file and move rest to archived file. The file contents are as below.... (14 Replies)
Discussion started by: abhi123
14 Replies

10. Shell Programming and Scripting

Sed script maybe?

I have a lot of script files that were created by Extract in a dir that no longer exists. Now that I have to run these scripts they 'all' have to be changed. I'm looking for a way to do a 'mass' change if possible. So far, I've dumped all of the script file names to a file and sorted them to... (5 Replies)
Discussion started by: HOlli
5 Replies
Login or Register to Ask a Question