sed and punctuations


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting sed and punctuations
# 8  
Old 04-08-2013
try sth like this,,

Code:
sed -e 's/#/LOLOLOL/g;s/@/MOMOMO/g;s/\([[:punct:]]\)//g;s/LOLOLOL/#/g;s/MOMOMO/@/g;' file

This User Gave Thanks to pamu For This Post:
# 9  
Old 04-08-2013
Fiddling around with awks, sed, locales, and char classes I've come up with this, respecting locale's punctuation class, and allowing to keep any number of punct. chars:
Code:
sed "s#[]\
        $(
          awk 'BEGIN {for (i=31;++i<127;) printf ("%c", i); printf "\n"}' |
                sed 's/[^[:punct:]]\|[]#@]//g'
         )-]##g" file

In short, it's running sed to remove from file any char in the string that the command substitution supplies.
awk produces an all- ASCII-char-string, from which the innermost sed removes NON- punct. chars PLUS the desired chars, here # and @. It's a bit tricky to include those chars with a special meaning to sed or regexes, like ] and -.
This User Gave Thanks to RudiC For This Post:
# 10  
Old 04-09-2013
more on the same

I wish to introduce array variable into sed command but in my code there is a mistake which I am not able to figure out.
Code:
#!/bin/bash
echo "Enter the type of file: "
read f

a=(*.$f)

for (( i =0; i < ${#a[i]}; i++ ))
do
echo $i "  " ${a[i]}
done

echo "Enter the filenumber for processing:"
read j

echo "Enter the punctuation mark that you wish to substitute:"
read c

r=${a[$j]}

for i in $c
do
cat $r | sed 's/"${c[i]}"/^g/g' > revised.txt 
done

There is problem somewhere in this "${c[i]}" . The (#) when introduced as the punctuation to be substituted then there is no change.

---------- Post updated 04-09-13 at 12:12 PM ---------- Previous update was 04-08-13 at 09:48 PM ----------

In continuation to above I have reached a stage where I can use variable in sed here is the code which I have used.

Code:
#!/bin/bash

echo "Enter the type of file: "
read f

a=(*.$f)

for (( i =0; i < ${#a[i]}; i++ ))
do
echo $i "  " ${a[i]}
done

declare -a z=('^g' '^g^g' '^g^g^g'' ^g^g^g^g' '^g^g^g^g^g')

echo "Enter the filenumber for processing:"
read j
echo "Enter the punctuation for substitute:"
read c

for i in "$c"
do
cat ${a[j]} | sed s/"$c"/$z/g > revised1.txt
done

cat revised1.txt | sed 's/[[:punct:]]//g' > revised2.txt


for i in $z
do
cat revised2.txt | sed s/$z/"$c"/g > final_rev.txt
done

Now this is for a single punctuation. How to make it for more than one. As you can see the array z can have upto 5 replacement for punctuation. So please help modify upto that stage.
thanks!
# 11  
Old 04-09-2013
If you consider using my proposal above, you can add any number of punctuation chars to be saved from removal. There may be some extra efforts needed to implement using a variable, but it should be possible. It's in this part \|[]#@] of the inner sed command, which is a regex OR (\|) and square brackets surrounding the closing square bracket plus the chars to be kept (#@).
This User Gave Thanks to RudiC For This Post:
# 12  
Old 04-09-2013
Thanks! but I am a beginner so your code was simply hieroglyphics for me. So, I was rather scared to use it. I am only exploring some basic solutions, unless you explain every character what it means I will not be able to learn what you have provided as solutions.
Can it be made simpler?
# 13  
Old 04-09-2013
Why not to use alnum instead of punct ?
Just add in the list the character or class you want to keep (like @ and # ) :

Code:
# cat myfile
Bb2$£¤µ%§\°~`!@#$%^&*()_-+={[}]|:;"'<,>.?/
# sed 's/[^#@[:alnum:]]*//g' myfile
Bb2µ@#
#

This User Gave Thanks to ctsgnb For This Post:
# 14  
Old 04-09-2013
thanks that is very economical. Although I have to test it to my needs, but still can we introduce variable for replacing # and @ so that there is a flexibility in number and choice of punctuation to be saved.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

I am learning regular expression in sed,Please help me understand the use curly bracket in sed,

I am learning SED and just following the shell scripting book, i have trouble understanding the grep and sed statement, Question : 1 __________ /opt/oracle/work/antony>cat teledir.txt jai sharma 25853670 chanchal singhvi 9831545629 anil aggarwal 9830263298 shyam saksena 23217847 lalit... (7 Replies)
Discussion started by: Antony Ankrose
7 Replies

2. Homework & Coursework Questions

Removing punctuations from file input or standard input

Just started learning Unix and received my first assignment recently. We haven't learned many commands and honestly, I'm stumped. I'd like to receive assistance/guidance/hints. 1. The problem statement, all variables and given/known data: How do I write a shell script that takes in a file or... (4 Replies)
Discussion started by: fozilla
4 Replies

3. Shell Programming and Scripting

sed and awk giving error ./sample.sh: line 13: sed: command not found

Hi, I am running a script sample.sh in bash environment .In the script i am using sed and awk commands which when executed individually from terminal they are getting executed normally but when i give these sed and awk commands in the script it is giving the below errors :- ./sample.sh: line... (12 Replies)
Discussion started by: satishmallidi
12 Replies

4. Shell Programming and Scripting

sed inside sed for replacing string

My need is : Want to change docBase="/something/something/something" to docBase="/only/this/path/for/all/files" I have some (about 250 files)xml files. In FileOne it contains <Context path="/PPP" displayName="PPP" docBase="/home/me/documents" reloadable="true" crossContext="true">... (1 Reply)
Discussion started by: linuxadmin
1 Replies

5. Shell Programming and Scripting

How to use sed to replace the a string in the same file using sed?

How do i replace a string using sed into the same file without creating a intermediate file? (7 Replies)
Discussion started by: gomes1333
7 Replies

6. UNIX for Dummies Questions & Answers

SED: Can't Repeat Search Character in SED Output

I'm not sure if the problem I'm seeing is an artifact of sed or simply a beginner's mistake. Here's the problem: I want to add a zero-width space following each underscore between XML tags. For example, if I had the following xml: <MY_BIG_TAG>This_is_a_test</MY_BIG_TAG> It should look like... (8 Replies)
Discussion started by: rhetoric101
8 Replies

7. Shell Programming and Scripting

deleting text records with sed (sed paragraphs)

Hi all, First off, Thank you all for the knowledge I have gleaned from this site! Deleting Records from a text file... sed paragraphs The following code works nearly perfect, however each time it is run on the log file it adds a newline at the head of the file, run it 5 times, it'll have 5... (1 Reply)
Discussion started by: Festus Hagen
1 Replies

8. Programming

Counting characters, words, spaces, punctuations, etc.

I am very new to C programming. How could I write a C program that could count the characters, words, spaces, and punctuations in a text file? Any help will be really appreciated. I am doing this as part of my C learning exercise. Thanks, Ajay (4 Replies)
Discussion started by: ajay41aj
4 Replies

9. Shell Programming and Scripting

sed over writes my original file (using sed to remove leading spaces)

Hello and thx for reading this I'm using sed to remove only the leading spaces in a file bash-280R# cat foofile some text some text some text some text some text bash-280R# bash-280R# sed 's/^ *//' foofile > foofile.use bash-280R# cat foofile.use some text some text some text... (6 Replies)
Discussion started by: laser
6 Replies

10. Shell Programming and Scripting

Issue with a sed one liner variant - sed 's/ ; /|/g' $TMP1 > $TMP

Execution of the following segment is giving the error - Script extract:- OUT=$DATADIR/sol_rsult_orphn.bcp TMP1=${OUT}_tmp1 TMP=${OUT}_tmp ( isql -w 400 $dbConnect_OPR <<EOF select convert(char(10), s.lead_id) +'|' + s.pho_loc_type, ";", s.sol_rsult_cmnt, ";", +'|'+ s.del_ind... (3 Replies)
Discussion started by: kzmatam
3 Replies
Login or Register to Ask a Question