Regarding that usage of vi, you can't count on that working. Some (most?) vi clones will not read from stdin when it's not a terminal. The standard explicitly mentions this case and leaves it as undefined behavior. Also, it does not include a -s option for vi.
Even if it did, the sequence of commands is faulty. G makes the last line the current line and ?AAA then searches backward for "AAA". What if there's an "AAA" on that last line in the file and another "AAA" on a previous line? The search will not see that the current line is a match and will instead stop at the previous, earlier line, which is not what's desired. The backwards search needs to begin from line 1.
(The following is nothing but a stylistic note of personal preference. It's not really important but perhaps you may like it.)
Since printf reuses the format string until it has exhausted all of its arguments, you can rewrite it so that printf newline-terminates each string argument for you. It's easier to read when the embedded \n sequences are replaced with whitespace-delimited arguments. Additionally, should the ed/ex commands use %, \n, \t, etc..., there's no need to escape them (as there would be in the format string).
First of all, thanks a lot for your comments, i really appreciate their quality.
As I am not very familiar with 'ed' usage, if you could show me the solution you would suggest for this thread as well as if you would point me a good link about it, i would really enjoy it.
As I am not very familiar with 'ed' usage, if you could show me the solution you would suggest for this thread as well as if you would point me a good link about it, i would really enjoy it.
Hi, ctsgnb:
My original post suggested ed, but ex is also a good option. If you already know vi, then you probably know quite a few ex commands (the colon commands in vi, but in ex you don't use the colon). Perhaps the following:
ed is simpler than ex and behaves a little differently. In ed, entering nothing but a line number to make that line the current line also prints it (ex does not), so a redirect to /dev/null is probably a good idea to prevent unwanted text on stdout. Also, while ex always supports wq to write and quit, some eds do and some dont. The standard doesn't. So w and q should be specified as separate commands. Using ed:
In ed/sed/ex, an empty regular expression is shorthand for the last regular expression used (whether in a previous substitution command or in an address).
There's also the heredoc option, of course, which is often the easiest of all to read (even though sometimes we all have an illogical inclination to squeeze everything into one line):
As for a good source of info, I think the man pages and a terminal to play with is sufficient. ed is pretty simple. Off the top of my head, I'd say there are only about 15 commands to learn.
Hi,
i want to replace the following lines in such a way that if the word merge exists in first column it must replace the 3rd column as M and if parse exists in first column then the last column must P, if neither it must mark it as X. I have tried the solution using awk, but it is saying... (6 Replies)
I have a file with multiple lines, all in the same format. For each line, I need to replace the sequence of digits after the last : with a new value, but keep the single quote at the end of the line.
Example:
Input: ( two lines of file)
Name: 'text1:200/text2:1.2.3.4'
Name2:... (19 Replies)
Hi Guys!
Unix newbie here!
Have a requirement for which I have been scouting the forums for a solution but has been out of luck so far :(
I have a file which contains the following:-
TEST1|TEST2|"TEST3|1@!2"|TEST5
My sed command should result in either one the following output:-... (6 Replies)
I've got a file like so:
...lots of lines, etc.
push "route 10.8.0.0 255.255.255.0"
push "route 192.168.1.123 255.255.255.0"
...lots of lines, etc.
I want to sed find/replace the IP address in the second line, whatever it is, with a new IP address, but I don't want to touch the first line.... (5 Replies)
Hi all,
I'm trying to replace a pattern/string in about 100 files with the filename using following commands but getting nowhere:
for f in *.fa; do sed "s/^>.*/>$f/g" $f > $f_v1.fa; done
for f in *.fa; do sed 's/^>.*/>`echo $f`/' > $fa_v1.fa; done
Basically I want to change any line... (5 Replies)
I have a file with multiple lines like this:
<junk><PATTERN><junk><PATTERN><junk>
<junk><PATTERN><junk><PATTERN><junk><PATTERN><junk>
Note that
1. There might be variable number occurrences of PATTERN in a line.
2. <> are just placeholders, they do not form part of the pattern.
I need... (4 Replies)
Hi ,
My file have data like
4:ALMOST NEVER PR 1925836
5:NEVER PR W DDA 5857610
6:NEVER PR WO DDA 26770205
but i want to replace the spaces before last numric digits out put should be like this
4:ALMOST NEVER PR=1925836
5:NEVER PR W DDA=5857610
6:NEVER PR WO... (7 Replies)
Hello All,
I have a string "CP_STATUS OSSRC_R6_0_Shipment_R1H_CU AOM_901046 R1H_LLSV1_2008031", and I just want to extract LLSV1, but I dont get the expected result when using the sed command below.
# echo "CP_STATUS OSSRC_R6_0_Shipment_R1H_CU AOM_901046 R1H_LLSV1_2008031" | awk '{print... (4 Replies)
Hi I need to help on finding the below pattern using sed
<b><a href="/home/document.do?assetkey=x-y-abcde-1&searchclause=photo">
and replace as below in the same line on the index file.
<b><a href="/abcde.html">
thx in advance.
Mari (5 Replies)