Sponsored Content
Top Forums Shell Programming and Scripting Script to find & replace a multiple lines string across multiple php files and subdirectories Post 302604153 by agama on Saturday 3rd of March 2012 11:07:47 AM
Old 03-03-2012
For starters, I'd rewrite the script you posted. The grep isn't needed, and since you're looking for a fixed set of files (*.php I assume), and fixed replace criteria, you don't need to worry about command line parameters. (You should if this is more than a one-off script, but I'll assume you don't need a script that you can run with different criteria.)

The basic script:
Code:
#!/usr/bin/env ksh

cd /directory/path/where/you/want/to/start
find . -name "*.php" | while read file
do
    echo "munging: $file"             # nice to see progress as it works
    mv "$file" "$file-"      # back it up

    ### insert sed or awk here ####  the sed in next line is for illustration only 
    sed 's/nosuchstringinthefile/noscuhreplacement/' "$file-" >"$file"
    if (( $? > 0 ))            # handle failure by putting the file back in place
    then
        echo "edit of $file failed" >&2
        mv "$file-" "$file"             # restore original
    else
        rm "$file-"               # worked, delete backup 
    fi
done



The tricky question is what criteria you need to determine which lines of the files to delete. Depending on what it is, the 'insert sed here' line in the previous script will need to change to do the right thing.

If your block of code is bounded by a unique string or phrase in the first and last lines then it will be a simple sed. The more complicated the criteria, the more complicated the code will need to be. Bottom line: post your criteria for deletion and someone will give you some help with writing a sed/awk or something that will delete things.


As for creating a script...
Start your favorite text editor, insert the code from above, or other of your choice, and save the file. Then at the command line, enter this command (assumes the file you saved was called delete_frm_php.ksh):

Code:
chmod 755 delete_frm_php.ksh

You then can invoke your script from the command line by typing delete_frm_php.ksh
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Find and Replace in multiple files (Shell script)

hi guys, Suppose you have 100 files in a folder and you want to replace all occurances of a word say "ABCD" in those files with "DCBA", how would you do it ??? jatin (13 Replies)
Discussion started by: jatins_s
13 Replies

2. UNIX for Dummies Questions & Answers

Find and replace a string in multiple files

I used the following script cd pathname for y in `ls *`; do sed "s/ABCD/DCBA/g" $y > temp; mv temp $y; done and it worked fine for finding and replacing strings with names etc. in all files of the given path. I'm trying to replace a string which consists of path (location of file) ... (2 Replies)
Discussion started by: pharos467
2 Replies

3. Shell Programming and Scripting

replace multiple lines in multiple files

i have to search a string and replace with multiple lines. example Input echo 'sample text' echo 'college days' output echo 'sample text' echo 'information on students' echo 'emp number' echo 'holidays' i have to search a word college and replace the multiple lines i have... (1 Reply)
Discussion started by: unihp1
1 Replies

4. Shell Programming and Scripting

shell script to find and replace string in multiple files

I used the following script cd pathname for y in `ls *`; do sed "s/ABCD/DCBA/g" $y > temp; mv temp $y; done and it worked fine for finding and replacing strings with names etc. in all files of the given path. I'm trying to replace a string which consists of path (location of file) ... (11 Replies)
Discussion started by: pharos467
11 Replies

5. Shell Programming and Scripting

Find & Replace string in multiple files & folders using perl

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)
Discussion started by: Zaheer.mic
0 Replies

6. Shell Programming and Scripting

Single/Multiple Line with Special characters - Find & Replace in Unix Script

Hi, I am creating a script to do a find and replace single/multiple lines in a file with any number of lines. I have written a logic in a script that reads a reference file say "findrep" and populates two variables $FIND and $REPLACE print $FIND gives Hi How r $u Rahul() Note:... (0 Replies)
Discussion started by: r_sarnayak
0 Replies

7. Shell Programming and Scripting

how can i find number of lines in files & subdirectories

how can i find number of lines in files & subdirectories ? (3 Replies)
Discussion started by: pcbuilder
3 Replies

8. Shell Programming and Scripting

replace (sed?) a string in file with multiple lines (string) from variable

Can someone tell me how I can do this? e.g: a=$(echo -e wert trewt ertert ertert ertert erttert erterte rterter tertertert ert) How do i replace the STRING with $a? I try this: sed -i 's/STRING/'"$a"'/g' filename.ext but this don' t work (2 Replies)
Discussion started by: jforce
2 Replies

9. Shell Programming and Scripting

Search & Replace: Multiple Strings / Multiple Files

I have a list of files all over a file system e.g. /home/1/foo/bar.x /www/sites/moose/foo.txtI'm looking for strings in these files and want to replace each occurrence with a replacement string, e.g. if I find: '#@!^\&@ in any of the files I want to replace it with: 655#@11, etc. There... (2 Replies)
Discussion started by: spacegoose
2 Replies

10. Shell Programming and Scripting

Replace a string with multiple lines

Hello Guys, I need to replace a string with multiple lines. For eg:- ABC,DEF,GHI,JKL,MNO,PQR,STU need to convert the above as below:- ABC,DEF, GHI1 GHI2 GHI3, JKL,MNO, PQR1 PQR2 PQR3, STU i have tried using code as:- (2 Replies)
Discussion started by: jassi10781
2 Replies
LPE(1)							      General Commands Manual							    LPE(1)

NAME
lpe - Lightweight programmer's editor SYNOPSIS
lpe [ --help | --version ] lpe [--mode <mode>] [ -- ] file DESCRIPTION
Lpe is a small, fast, visual text editor designed to make editing code easier. It provides simultaneously all the features that may be required in a good code editor while preserving a light and intuitive feel that makes it nice to use. Options --help Prints a brief description of program usage and terminates. This must be the first option to lpe, and all other options are ignored. --version Prints a message indication the program version and terminates. This must be the first option to lpe, and all other options are ignored. --mode Sets the buffer mode to the one specified, instead of scanning for a suitable mode from those available. -- Treat future arguments as file names, not options. This allows lpe to be used to edit files starting with the - character. NOTES
What follows are the control key functions for lpe. Arrow keys, home, end, backspace, delete and the like all do as they would be expected to do. Some control keys are bound to the same function as some standard movement keys, such as home or page down. This is because the more intuitive keys may not be available on some systems. Command Keys Ctrl-Q Move cursor to beginning of line (alternative to Home) Ctrl-W Move cursor to end of line (alternative to End) Ctrl-R Scroll one screen up (alternative to PgUp) Ctrl-T Scroll one screen down (alternative to PgDn) Ctrl-O Move to the next word Ctrl-P Move to the previous word Ctrl-K Kill the current line Ctrl-Y or Ctrl-U Insert the most recent block of killed lines Ctrl-S Search for a specified string in the file Ctrl-A Search again for the last search query Ctrl-F Ctrl-O Open a new file to replace the current buffer Ctrl-F Ctrl-S Save the buffer to disk Ctrl-F Ctrl-A Save to disk with an alternate file name Ctrl-F Ctrl-R Read a file and insert it at the current cursor position Ctrl-F Ctrl-E Pretend that a buffer hasn't been modified Ctrl-B Ctrl-S Set the mode of the current buffer Ctrl-B Ctrl-T Toggle between hard and soft tabs for this buffer Ctrl-B Ctrl-A Toggle automatic indentation of this buffer Ctrl-G Ctrl-A Go to the first line of the buffer Ctrl-G Ctrl-S Go to the last line of the buffer Ctrl-G Ctrl-G Go to a specific line number of the buffer Ctrl-N Ctrl-R Enter a value for the command repeater Ctrl-N Ctrl-T Multiply the command repeater value by four Ctrl-N Ctrl-O Start or stop recording a macro Ctrl-N Ctrl-P Play back the last recorded macro Ctrl-V Ctrl-V Pass the entire buffer through a shell command Ctrl-V Ctrl-A Pass the entire buffer through an awk script Ctrl-V Ctrl-S Pass the entire buffer through a sed script Ctrl-V Ctrl-B Pass several lines of the buffer through a shell command Ctrl-V Ctrl-D Pass several lines of the buffer through an awk script Ctrl-V Ctrl-F Pass several lines of the buffer through a sed script Ctrl-D Perform an internal debug command Ctrl-X Write the buffer to disk and exit <interrupt> Exit without writing to disk Ctrl-Z Suspend the editor and escape to a prompt Ctrl-L Erase and redraw the entire screen <interrupt> refers to your terminal's interrupt key. This is often Ctrl-C, but can vary between terminals. Ctrl-Z, on the other hand, is fixed, regardless of the normal stop key for your terminal. MODULES
Although lpe is meant to be small, it has the capability of performing more advanced actions through a feature known as buffer modes. Buf- fer modes allow lpe to act differently according to the programming language in the current buffer. They are implemented through language modules, which are loaded at run-time by lpe to handle buffers that they apply to. All language modules should be placed in a module repository directory. These directories are set by the LPE_MODULE_PATH environment vari- able, which should be a colon-separated list of directories (similar to PATH). If this variable is not set, then lpe scans for modules in the following locations, and in this order: $HOME/.lpe /usr/local/lib/lpe /usr/lib/lpe /etc/lpe Note that the /etc/lpe directory is old, obsolete, and non-standard. It should not be used to hold modules. As modules are binary files and are specific to the architecture that uses them, they should be properly placed in the lib directories listed above. These locations are scanned at run-time, and any regular files in them are interpreted as potential language modules for use by lpe. Sub- directories will not be scanned. A buffer will be assigned the first mode found that applies to that file, so for example a mode in a user's home directory will override one in the system-wide lib directory. SEE ALSO
emacs(1), pico(1) AUTHOR
Chris Smith, cd_smith@ou.edu BUGS
Lots of 'em -- see the BUGS file in the distribution for a partial list. I am not planning on updating this man page often enough to keep up with the bug list, so I won't even try to list bugs here. 12 December 1998 LPE(1)
All times are GMT -4. The time now is 12:41 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy