A friend wrote a little script for me a while back which filters an error log. I need to take out one of the strings it searches for. This is on a UNIX machine. I can get into the program if i type vi errorscan*
and once the code is showing i can edit stuff if i press i, but that’s about the extent of my knowledge working with Perl. The backspace button doesn’t work and i don’t know how to delete the string and then save/exit the program. Help please.
Sounds like more of a vi question than a perl question.
Do you only one want to remove one line?
If so
vi errorscan, then do not hit i, but instead do /‘string to search for’
Where the ‘string to search for’ is basically the line you want to delete,
then dd
then save.
Heck, you could even cat errorscan | grep -v ‘string to search for’ > errorscan.new, then mv errorscan.new to errorscan if you wanted to…
Until you learn more about vi, you might want to use a text editor like kate or kedit. (Assuming Linux.) Or start with vimtutor.
But, for your question, there are several ways to do it. First, copy the file:
cp errorscan errorscan.110303*
If it is possible to find a unique word or phrase in the string, and the string is on its own line, you can simply delete the string.
vi errorscan* g/STRING/d
If it is not on its own line, use the backslash “/” to search for the string. If it appears more than once, the “n” key will go to the next instance. Use the h,j,k and l keys to move right, down, up and left. Use the “x” key to remove one character at a time.
When done, hit the Escape key. Then type “:wq” to write and save your exits. If you need to close the vi session without saving, type :q!
Someone will be along shortly with more whizbang ways of doing it. I tried to keep it simple for you.
You know, I probably screwed you up in that last post…
It’s OK if you want to delete one LINE (example: delete Wheee)
next if m/Whoopi/;
next if m/Wheee/;
next if m/Wow/;
Here, you just find the line via /Whee while in vi, but not in edit mode, then type dd, and finally save (:w!).
But if you need to edit further
next if m/Wheee/ || m/Whoo/;
Then you can use x to delete one letter (under the cursor) at a time to remove (example) m/Wheee/ || to yield
next if m/Whoo/;
Note: u will undo the last operation only, so if you accidently delete i in if, type u to get it back
Again, save via :w!
If it’s an array or hash, or a more complex if statement well then you can still edit via x, but if its the last element you may have to use insert mode - hard to tell without more info.