Visit Our UNIX and Linux User Community


Find/replace alpha characters in string


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Find/replace alpha characters in string
# 1  
Old 01-21-2015
Find/replace alpha characters in string

Hi,
I would like to find a 3-letter character series in a string/variable and replace it with x's.

An example set of strings is:

Code:
563MS333_101_afp_400-100_screening
563MS333_104-525_rjk_525_screening
563MS333_110_dlj_500-100_w24
563MS333_888-100_mmm_424_screening

The only constants are: 565MS333 and the time points at the end of each string (so 'screening', 'w24', 'w48', 'w96'). The rest can be variable.

I am trying to replace the 3-alpha characters in between the 3-digit numbers with x's (so, *_xxx_*). The 3 alpha characters are usually between underscores, but not always.

Thanks for the help/input!

Last edited by Scrutinizer; 01-23-2015 at 01:59 AM.. Reason: code tags
# 2  
Old 01-21-2015
This sed may help:
Code:
$ sed -r "s/([0-9]{1,})(_{,1})[a-zA-Z]{3}(_{,1})([0-9]{1,})/\1\2xxx\3\4/g" infile                   
563MS333_101_xxx_400-100_screening
563MS333_104-525_xxx_525_screening
563MS333_110_xxx_500-100_w24
563MS333_888-100_xxx_424_screening

# 3  
Old 01-21-2015
That is a really nice solution, but it applies to an input text file. In my script, each of those lines is a variable in a loop. I do this so I can place the output of the sed command as a new variable. So for example:

Code:
cat dirlist | while read line
do
name="563MS663_100-101_afp_200_screening" (this value is actually derived using another function, I don't actually hard code it into $name like this)
newname="sed function on $name to replace alpha chars with x's"
done

Can you breakdown the sed command for me so I can try to adapt it?

Many thanks!
# 4  
Old 01-21-2015
This certainly is not bulletproof, but might point you in a direction to pursue:
Code:
echo ${name/[a-z][a-z][a-z]/xxx}
563MS663_100-101_xxx_200_screening

# 5  
Old 01-22-2015
This is a good start to something, thank you for that!
# 6  
Old 01-23-2015
The sed command Klashxx gave you will work on some systems, but the -r option is not portable (and you haven't said what OS you're using).

For systems with a POSIX-conforming sed utility, the following sed script seems to do what you want:
Code:
strings='563MS333_101_afp_400-100_screening leading and trailing _
563MS333_104-525_rjk_525_screening leading and trailing _
563MS333_110_dlj_500-100_w24 leading and trailing _
563MS333_888-100_mmm_424_screening leading and trailing _
563MS333_101afp_400-100_screening trailing _
563MS333_104-525rjk_525_screening trailing _
563MS333_110dlj_500-100_w24 trailing _
563MS333_888-100mmm424_screening trailing _
563MS333_101afp400-100_screening no _
563MS333_104-525rjk525_screening no _
563MS333_110dlj500-100_w24 no _
563MS333_888-100mmm424_screening no _
563MS333_101_afp400-100_screening leading _
563MS333_104-525_rjk525_screening leading _
563MS333_110_dlj500-100_w24 leading _
563MS333_888-100_mmm424_screening leading _
563MS333_101_fp_400-100_screening No Change too few alphas
563MS333_101fp_400-100_screening No Change too few alphas
563MS333_101_fp400-100_screening No Change too few alphas
563MS333_101fp400-100_screening No Change too few alphas
563MS333_101_aafp_400-100_screening No Change too many alphas
563MS333_101aafp_400-100_screening No Change too many alphas
563MS333_101_aafp400-100_screening No Change too many alphas
563MS333_101aaafp400-100_screening No Change too many alphas'
printf '%s\n' "$strings" | while read line
do	printf 'Input line: %s\n' "$line"
	nline="$(printf '%s\n' "$line" |
		sed 's/^\(563MS333[-_[:digit:]]*[[:digit:]]\{3\}_\{0,1\}\)[[:alpha:]]\{3\}\(_\{0,1\}[[:digit:]]\{3\}\)/\1xxx\2/')"
	printf '  New line: %s\n' "$nline"
done

and produces the output:
Code:
Input line: 563MS333_101_afp_400-100_screening leading and trailing _
  New line: 563MS333_101_xxx_400-100_screening leading and trailing _
Input line: 563MS333_104-525_rjk_525_screening leading and trailing _
  New line: 563MS333_104-525_xxx_525_screening leading and trailing _
Input line: 563MS333_110_dlj_500-100_w24 leading and trailing _
  New line: 563MS333_110_xxx_500-100_w24 leading and trailing _
Input line: 563MS333_888-100_mmm_424_screening leading and trailing _
  New line: 563MS333_888-100_xxx_424_screening leading and trailing _
Input line: 563MS333_101afp_400-100_screening trailing _
  New line: 563MS333_101xxx_400-100_screening trailing _
Input line: 563MS333_104-525rjk_525_screening trailing _
  New line: 563MS333_104-525xxx_525_screening trailing _
Input line: 563MS333_110dlj_500-100_w24 trailing _
  New line: 563MS333_110xxx_500-100_w24 trailing _
Input line: 563MS333_888-100mmm424_screening trailing _
  New line: 563MS333_888-100xxx424_screening trailing _
Input line: 563MS333_101afp400-100_screening no _
  New line: 563MS333_101xxx400-100_screening no _
Input line: 563MS333_104-525rjk525_screening no _
  New line: 563MS333_104-525xxx525_screening no _
Input line: 563MS333_110dlj500-100_w24 no _
  New line: 563MS333_110xxx500-100_w24 no _
Input line: 563MS333_888-100mmm424_screening no _
  New line: 563MS333_888-100xxx424_screening no _
Input line: 563MS333_101_afp400-100_screening leading _
  New line: 563MS333_101_xxx400-100_screening leading _
Input line: 563MS333_104-525_rjk525_screening leading _
  New line: 563MS333_104-525_xxx525_screening leading _
Input line: 563MS333_110_dlj500-100_w24 leading _
  New line: 563MS333_110_xxx500-100_w24 leading _
Input line: 563MS333_888-100_mmm424_screening leading _
  New line: 563MS333_888-100_xxx424_screening leading _
Input line: 563MS333_101_fp_400-100_screening No Change too few alphas
  New line: 563MS333_101_fp_400-100_screening No Change too few alphas
Input line: 563MS333_101fp_400-100_screening No Change too few alphas
  New line: 563MS333_101fp_400-100_screening No Change too few alphas
Input line: 563MS333_101_fp400-100_screening No Change too few alphas
  New line: 563MS333_101_fp400-100_screening No Change too few alphas
Input line: 563MS333_101fp400-100_screening No Change too few alphas
  New line: 563MS333_101fp400-100_screening No Change too few alphas
Input line: 563MS333_101_aafp_400-100_screening No Change too many alphas
  New line: 563MS333_101_aafp_400-100_screening No Change too many alphas
Input line: 563MS333_101aafp_400-100_screening No Change too many alphas
  New line: 563MS333_101aafp_400-100_screening No Change too many alphas
Input line: 563MS333_101_aafp400-100_screening No Change too many alphas
  New line: 563MS333_101_aafp400-100_screening No Change too many alphas
Input line: 563MS333_101aaafp400-100_screening No Change too many alphas
  New line: 563MS333_101aaafp400-100_screening No Change too many alphas


Previous Thread | Next Thread
Test Your Knowledge in Computers #958
Difficulty: Hard
Metamorphism protects a virus against heuristic analysis.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

sed replace nth characters with string

Hi, I hope you can help me out please? I need to replace from character 8-16 with AAAAAAAA and the rest should stay the same after character 16 gtwrhtrd11111111rjytwyejtyjejetjyetgeaEHT wrehrhw22222222hytekutkyukrylryilruilrGEQTH hrwjyety33333333gtrhwrjrgkreglqeriugn;RUGNEURGU ... (4 Replies)
Discussion started by: stinkefisch
4 Replies

2. Shell Programming and Scripting

Help to replace the string with special characters

{"name":"alR_pl-ENVIRONMENT_192_168_211_123_sDK_PROVISION_7","description":"aLR_pl-ENVIRONMENT_192_168_211_123_sDK_PROVISION_7","json_class":"Chef::Role","default_attributes":{},"override_attributes":{"yoapp":{"jboss":"5.1.0","port":"2243","warname":"soap","datacenter":"alR","ip":"192.168.211.123","... (3 Replies)
Discussion started by: nikhil jain
3 Replies

3. Shell Programming and Scripting

Find and replace with 0 for characters in a specific position

Need command for position based replace: I need a command to replace with 0 for characters in the positions 11 to 20 to all the lines starts with 6 in a file. For example the file ABC.txt has: abcdefghijklmnopqrstuvwxyz 6abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz... (4 Replies)
Discussion started by: thangabalu
4 Replies

4. Shell Programming and Scripting

Replace characters in string with awk gsub

Hi I have a source file that looks like a,b,c,d,e,f,g,h,t,DISTI(USD),MSRP(USD),DIST(EUR),MSRP(EUR),EMEA-DISTI(USD),EMEA-MSRP(USD),GLOBAl-DISTI(USD),GLOBAL-MSRP(USD),DISTI(GBP), MSRP(GBP) I want to basically change MSRP(USD) to MSRP,USD and DIST(EUR) to DIST,EUR and likewise for all i'm using... (3 Replies)
Discussion started by: r_t_1601
3 Replies

5. Shell Programming and Scripting

Find number of characters in a column and replace

Hi all, I want to count total no. of characters in a column. and if no. of charaters are more than 3 then it must replace it by splitted string. ie, it must place a space after 3 characters. Ex: 21 435g asd3dd jklfjwe wer column number 3 has 4 alphanumeric character, so it must be splitted... (3 Replies)
Discussion started by: CAch
3 Replies

6. Shell Programming and Scripting

find replace a pattern and following characters in a word

Suppose that I have a string "one:#red two:#yellow three:#gr'een four:#blu^e" and I want to replace the pattern :# and the following characters in the word with nothing. The output string should look "one two three four" How can I do this with sed. Some points to consider (a) the last word in... (1 Reply)
Discussion started by: superuser84
1 Replies

7. Shell Programming and Scripting

search and replace characters in one string

I have lines like: Dog Cat House Mouse Dog Cat House Mouse Dog Cat House Mouse Dog Cat House Mouse I'd like to replace characters only in $3. H -> Z s -> W e -> x Resulting in something like (where $1, $2, and $4 are not changed): Dog Cat ZouWx Mouse Dog Cat ZouWx Mouse... (3 Replies)
Discussion started by: dcfargo
3 Replies

8. UNIX for Dummies Questions & Answers

Help with find and replace w/string containing special characters

Can I get some help on this please, I have looked at the many post with similar questions and have tried the solutions and they are not working for my scenario which is: I have a text file (myfile) that contains b_log=$g_log/FILENAME.log echo "Begin processing file FILENAME " >> $b_log ... (4 Replies)
Discussion started by: CAGIRL
4 Replies

9. Shell Programming and Scripting

Replace characters in a string using their ascii value

Hi All, In the HP Unix that i'm using when i initialise a string as Stalled="'30G'" Stalled=$Stalled" '30C'", it is taking the character as a comma. I need to grep for 30G 30C in a file and take its count. But since this character is not being understood, the count returns a zero. The... (2 Replies)
Discussion started by: roops
2 Replies

10. Shell Programming and Scripting

Replace string and delete extra characters

Hopefully someone can help out here. This is probably fairly basic, but I've searched and tried several variations of the solutions presented in these forums, so I'll go ahead and ask. How can I locate a string in a file, delete the characters after the string and then replace the string with a... (2 Replies)
Discussion started by: slaubhan
2 Replies

Featured Tech Videos