balajesuri has already answered most of your questions, so i will try to shed some additional light on it:
Quote:
Originally Posted by sudon't
And part of the reason is that it "works in place" rather than creating new files.
As i have explained in detail in the mentioned thread: it just looks that way.
Quote:
Originally Posted by sudon't
Also, I like the notion of a perl pie!
LOL!
Quote:
Originally Posted by sudon't
How is the line being deleted? Is that what the d operator is saying, delete? And will it then delete any line which contains the preceding string? In other words, if we know that only our target line contains "PhotoBooth", would that be enough to get rid of the whole line?
Yes, more or less.
Whenever you construct a regexp you have to ask three questions:
1) does it match what i want to match?
As you want to delete lines containing "PhotoBooth", this is obviously the case. OK.
2) does it match any instance i want to match?
For instance, there might be lines which do not read "PhotoBooth", but "Photobooth" and which should also be deleted. The regexp above won't catch these, because regexps are case-sensitive. You would have to use another - slightly different - regexp to catch both versions.
3) does it match things i don't want to match?
For instance, you might have lines in your files which contain "PhotoBooth", but which shouldn't be deleted. In this case you would have to enlarge your regexp, maybe to match only instances of "PhotoBooth" inside "<string>"-tags.
Note, i do not know your files, so i don't know if these points apply to your project. What i said is just a how-to for constructing regexps in general.
Regarding the "d" command for deleting lines: the general form of a command in "sed" is one of the three versions:
"address" can be a regexp, a line number or the symbol "$", which means the last line.
"command" can be either a single command, like "s" (=substitute, change), "d" (=delete), etc. or a compound command, consisting of several singular commands: "{ cmd1; cmd2; cmd3; ...}"
The first form applies "command" to consecutive lines, starting with the first address and ending with the last:
The first will delete lines 10-15, the second will change "x" to "y" in a block of lines from a line containing "foo" to a line containing "bar".
The second form will apply the command to a certain line or all the lines for which the regexp matches. Your command is this pattern:
The first example will delete line 10, the second will change "x" to "y" only in lines containing "foo".
The third variation, finally, will apply "command" to every line. This is what most times is used.
The first would delete every line (not very helpful, LOL), the second would replace "x" by "y" in every line.
Quote:
Originally Posted by sudon't
Why do certain characters have to be escaped? I thought if the regex is quoted, it's protected from the shell.
You do not have to protect it from the shell, but from the regexp-engine. Like the shell, regexp engines have characters too which have a special meaning to them, as bajalesuri has already explained. These characters are called "metacharacters" and all have this property: they do not stand for themselves (their "literal" meaning), but have some special function. Every time you want to use them literally, you have to escape them to tell the regexp engine it shouldn't treat them in their special capacity but as normal characters. You might want to read this little introduction about regular expressions.
I get a text file with 70+ columns (seperated by Tab) and about 10000 rows. The 58th Column is all numbers. But sometimes 58th columns has "/xxx=##" after the numeric data. I want to truncate this string using the script. Any Ideas...:confused: (3 Replies)
Hi all,
I have a script that scan files, find old templet and replace it with new one.
#!/bin/ksh
file_name=$1
old_templet=$2
new_templet=$3
# Loop through every file like this
for file in file_name
do
cat $file | sed "s/old_templet/new_templet/g" > $file.new
#do a global searce and... (8 Replies)
Looking for a way using sed/awk/perl to replace port numbers in a file with an incrementing number. The original file looks like...
Host cmg-iqdrw3p4
LocalForward *:9043 localhost:9043
Host cmg-iqdro3p3a
LocalForward *:10000 localhost:10000
Host cmg-iqdro3p3b
LocalForward... (2 Replies)
Is this something SED would be used for or can AWK do it?
I have a string that I would like to chop bits out of and re-arrange some of the rest.
Basically I want to change this:
<log4j:event logger="webserver" timestamp="1240110840109" time="Sun Apr 19 04:14:00 BST 2009" level="INFO"... (4 Replies)
Trying to create a script/executable to replace "abc" text string in "myfile.htm" with input from a pop-up field. For example, launch this thing and a prompt is popped up asking the user to input what "abc" should be replaced with, then it inserts what the user inputs in place of abc in the... (3 Replies)
find . -type f -name "*.sql" -print|xargs perl -i -pe 's/pattern/replaced/g'
this is simple logic to find and replace in multiple files & folders
Hope this helps.
Thanks
Zaheer (0 Replies)
Hi All,
I have a unix shell script file as below.
My task is
a)to replace 248 to 350 and need to create a new file as BW3_350.sh
b)to replace 248 to 380 and need to create a new file as BW3_380.sh
c)to replace 248 to 320 and need to create a new file as BW3_320.sh
there is no... (6 Replies)
I am making an eBook.
I am editing the html in BBedit.
I need to replace all <p class="s5"> with just a <p>.
How do I write this for GREP?
Thank you,
Abby (5 Replies)
Hi
I am looking to rename the contents of this dir, each one with a new timestamp, interval of a second for each so it the existing format is on lhs and what I want is to rename each of these to what is on rhs..hopefully it nake sense
CDR.20060505.150006.gb CDR.20121211.191500.gb... (3 Replies)
I have text with upper and lower case words. I want to find something and replace it with something new. But it should match the case - Meaning - it should replace old upper cased word with NEW upper case word and lower with lower.
example:
this text is very simple TEXT.
now I want to replace... (5 Replies)