Simple file editing question

Let's say I have a directory with 1000 files each containing a line with  text e.g "entry=" which I want to replace with another text entery.

If someone has an emacs or commandline or script solution it would be appreciated.
LVL 1
dryzoneAsked:
Who is Participating?
 
ahoffmannConnect With a Mentor Commented:
find . -type f -exec perl -i.old -pe 's/'"'"'NEW'"'"'/new line/' {} \;
0
 
chris_calabreseCommented:
find . -type f | while read file
do  sed 's/something/something-else/' \
      < "$file" > "$file.tmp" \
    && mv "$file.tmp" "$file"
done
   
0
 
dryzoneAuthor Commented:
Ok were halfway there
Unfortunately the files contain text which is commented out. I need to uncomment these lines in bulk fashion.

The hash seems to create problems.
I checked with an echo that the filenames were read with your script and passed to sed, but the hash....seems to kick sed out.

sed 's/#exclude1='NEW'/exclude1=
0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
chris_calabreseCommented:
The hash isn't the problem, it's the single-quotes inside the single-quoted sed arguments, plus the lack of a trailing /

sed "s/#exclude1='NEW'/exclude1=/"
0
 
dryzoneAuthor Commented:
No, I just did not copy all (see below), if sed has problems with quotes, then how the heck am I going to remove/replace them?

find . -type f | while read file
                       do  
echo reading $file
sed 's/#exclude1='NEW'/exclude1=Half.com/' < "$file" > "$file.tmp" && mv "$file.tmp" "$file"
                       done
0
 
dryzoneAuthor Commented:
OK you solved half of the problem.
Now how do I get rid of lines containing ' '
I could not figure out from sed man page.
0
 
ahoffmannCommented:
find . -type f -exec perl -i -pe 's/(.*entry=)something/$1something-else/' {} \;
0
 
DVBCommented:
Quote the #: \#
0
 
dryzoneAuthor Commented:
4 ahoffmann
Did not work.
Trying to replace e.g. 'NEW' in the files with e.g. hello failed.  'NEW' remained in the files.

find . -type f -exec perl -i -pe 's/(.*entry=)'NEW'/hello/' {} \;
0
 
ahoffmannCommented:
> find . -type f -exec perl -i -pe 's/(.*entry=)'NEW'/hello/' {} \;

this cannot work. Did you mean:

  find . -type f -exec perl -i -pe 's/(.*entry=)NEW/$1hello/' {} \;

or

  find . -type f -exec perl -i -pe 's/(.*entry=)'"'"'NEW'"'"'/$1hello/' {} \;
0
 
dryzoneAuthor Commented:
The text files 100's of them contain the following text.

 'NEW'
#exclude2='a'
#exclude3='b'
#exclude4='c'
#exclude5='d'

Of which I want to replace 'NEW' with other text -e.g., new line,  to yield

new line
#exclude2='a'
#exclude3='b'
#exclude4='c'
#exclude5='d'

The examples above did not work.
'NEW' was not replaced with the new text e.g. new line

Note: I dont just want to replace NEW but rather 'NEW'  , which is why I have problems with my usual methods processing batches of files.
0
 
dryzoneAuthor Commented:
The text files 100's of them contain the following text.

 'NEW'
#exclude2='a'
#exclude3='b'
#exclude4='c'
#exclude5='d'

Of which I want to replace 'NEW' with other text -e.g., new line,  to yield

new line
#exclude2='a'
#exclude3='b'
#exclude4='c'
#exclude5='d'

The examples above did not work.
'NEW' was not replaced with the new text e.g. new line

Note: I dont just want to replace NEW but rather 'NEW'  , which is why I have problems with my usual methods processing batches of files.
0
 
ahoffmannCommented:
# the syntax in the file listed in you last comment is completely different to what you described before
# so it's no suprise that my (and probably all other) suggestions do not work !!
#
# following works for exactly the example you gave above:

find . -type f -exec perl -i.old -pe 's/'"'"'NEW'"'"'/new line/' {} \;

# if it does not work, please copy&paste this example to a file, and try again, twice ...
0
 
dryzoneAuthor Commented:

I posed it as a general example i.e. replacing ANY line of text with another. It was found that SED cannot replace lines encapsulated in quotation. I then specialised it to a more explicit example to deal with the remainig problem of quotations which is where we are now.

I just made it more explicit.
The perl string contains a problem as above

[root@gateway test]# find . -type f -exec perl -i.old -pe 's/'"'"'NEW'"'"'/new line/' {}
find: missing argument to `-exec'
[root@gateway test]#

0
 
dryzoneAuthor Commented:
I just copied  your string and executed it.... Still there is an argument missing to exec switch as mentioned above

[Liebrecht@gateway test]$ find . -type f -exec perl -i.old -pe 's/'"'"'NEW'"'"'/new line/' {}
find: missing argument to `-exec'
[Liebrecht@gateway test]$
0
 
dryzoneAuthor Commented:
I just copied  your string and executed it.... Still there is an argument missing to exec switch as mentioned above

[Liebrecht@gateway test]$ find . -type f -exec perl -i.old -pe 's/'"'"'NEW'"'"'/new line/' {}
find: missing argument to `-exec'
[Liebrecht@gateway test]$
0
 
dryzoneAuthor Commented:
I just copied  your string and executed it.... Still there is an argument missing to exec switch as mentioned above

[Liebrecht@gateway test]$ find . -type f -exec perl -i.old -pe 's/'"'"'NEW'"'"'/new line/' {}
find: missing argument to `-exec'
[Liebrecht@gateway test]$
0
 
dryzoneAuthor Commented:
My apologies,
I did not use the semicolon.
It works fine
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.