11-13-2007
sed: working with multiple lines
Got another sed question
My text block is
Quote:
10002,9:12/123456789
10002,10:1
10002,11:1
10004,9:12/123456789
10004,10:1
I need to do the following:
If (and only if) the line starting with 10002,11 is followed by a line starting with 10004,9 , insert the line 10003,9 between the 2
Thus, my output should be
Quote:
10002,9:12/123456789
10002,10:1
10002,11:1
10003,9
10004,9:12/123456789
10004,10:1
I tried
Quote:
sed '
/^10002,11/ {
N
/\n.*10004/ a\
10003,9:1
}'
but this gives me
Quote:
10002,9:12/123456789
10002,10:1
10002,11:1
10004,9:12/123456789
10003,9
10004,10:1
(the order is not as i wanted it)
What am I doing wrong?
Thanks once again!
10 More Discussions You Might Find Interesting
1. Shell Programming and Scripting
I am trying to use sed to delete multiple lines in a file. The problem is that I need to search for a certain line and then once found delete it plus the next 4 lines. For instance if I had a file that consisted of the following lines:
#Data1.start
(
(Database= data1)
(Name = IPC)... (1 Reply)
Discussion started by: rambo15
1 Replies
2. Shell Programming and Scripting
Hi all,
I am trying to figure out the syntx to delete multiple lines w/ sed. I know the following syntax will delete lines 1 THROUGH 5 from filex:
sed 1,5d filex
But I wan to delete lines 1 AND 5 (keeping lines 2,3, and 4). Does anyone know how to do this in a single sed statement?
... (2 Replies)
Discussion started by: bookoo
2 Replies
3. Shell Programming and Scripting
Hi all:
I have a file in which the contents are as following:
...
This is a test
ONE
TWO
Hello, world!
XXX YYY CCC
test again
three, four
five
six
seven
world
AAA BBB QQQ
test
eight, nine
world (3 Replies)
Discussion started by: xb88
3 Replies
4. Shell Programming and Scripting
I have a file names 'log.txt' that looks something like this:
#This is a comment
/sbin/iptables -A INPUT -p tcp -s ip.of.a machine --destination-port 21 -j ACCEPT
#This is the comment to read#
/sbin/iptables -A INPUT -p tcp -s ip.of.a.machine --destination-port 21 -j ACCEPT
I would like... (1 Reply)
Discussion started by: manouche
1 Replies
5. Shell Programming and Scripting
Before I ask my actual question, is it going to be a problem that I want to run this process on a 15 Gig file that is ~140 million rows?
What I'm trying to do:
I have a file that looks like
Color,Type,Count,Day
Yellow,Full
5
Tuesday
Green,Half
6
Wednesday
Purple,Half
8
Tuesday
...... (3 Replies)
Discussion started by: goldfish
3 Replies
6. Shell Programming and Scripting
I have a file example.txt with content look like this:
<TAG>
1
2
3
</TAG>
and I use a sed command to replace everything between <TAG></TAG> as below:
sed -e 's/\(<TAG>\)*\(<.*\)/something/g' example.txt > example.txt.new
But unfortunately, the command failed to replace as i want, it... (23 Replies)
Discussion started by: dollylamb
23 Replies
7. Shell Programming and Scripting
Hi guys,
anyone know how can i join multiples lines using sed till the end of a file and output to another file in a single line?
The end of each line will be replaced with a special char "#".
I am using the below SED command, however it seems to remove the last 2 lines. Also not all lines... (12 Replies)
Discussion started by: DrivesMeCrazy
12 Replies
8. Shell Programming and Scripting
Hi All,
I have a input file as sample below
<this is not starting of file>
record
line1
line2
line3
end
line4
line5
record
line6
line7
line8
my requirement is this, i want to select a pattern between first record and end, whatever is written between first record and end.
and... (0 Replies)
Discussion started by: adgangwar
0 Replies
9. Shell Programming and Scripting
Hi everybody,
I am writing a little script to manage keystores and need some help with sed.
The output of the keystore file is like:
vi 2, Dec 7, 2012, trustedCertEntry,
Certificate fingerprint (MD5): F9:1F:FE:E6:A3:CB:99:88:44:D4:67:ED:G5:F8:97:7A
system@remote-server, Dec 17, 2013,... (13 Replies)
Discussion started by: Hamss
13 Replies
10. UNIX for Beginners Questions & Answers
I have a text file and i want to run 3 sed commands for the lines entered by the user using perl script. I am doing this manually till now.
need some help with this
The sed commands I have to use are :
sed -i "s/{+//" error.txt
sed -i "s/+}//" error.txt
sed -i "s/\//g" error.txt... (5 Replies)
Discussion started by: utkarshkhanna44
5 Replies
LEARN ABOUT CENTOS
shell-quote
SHELL-QUOTE(1) User Contributed Perl Documentation SHELL-QUOTE(1)
NAME
shell-quote - quote arguments for safe use, unmodified in a shell command
SYNOPSIS
shell-quote [switch]... arg...
DESCRIPTION
shell-quote lets you pass arbitrary strings through the shell so that they won't be changed by the shell. This lets you process commands
or files with embedded white space or shell globbing characters safely. Here are a few examples.
EXAMPLES
ssh preserving args
When running a remote command with ssh, ssh doesn't preserve the separate arguments it receives. It just joins them with spaces and
passes them to "$SHELL -c". This doesn't work as intended:
ssh host touch 'hi there' # fails
It creates 2 files, hi and there. Instead, do this:
cmd=`shell-quote touch 'hi there'`
ssh host "$cmd"
This gives you just 1 file, hi there.
process find output
It's not ordinarily possible to process an arbitrary list of files output by find with a shell script. Anything you put in $IFS to
split up the output could legitimately be in a file's name. Here's how you can do it using shell-quote:
eval set -- `find -type f -print0 | xargs -0 shell-quote --`
debug shell scripts
shell-quote is better than echo for debugging shell scripts.
debug() {
[ -z "$debug" ] || shell-quote "debug:" "$@"
}
With echo you can't tell the difference between "debug 'foo bar'" and "debug foo bar", but with shell-quote you can.
save a command for later
shell-quote can be used to build up a shell command to run later. Say you want the user to be able to give you switches for a command
you're going to run. If you don't want the switches to be re-evaluated by the shell (which is usually a good idea, else there are
things the user can't pass through), you can do something like this:
user_switches=
while [ $# != 0 ]
do
case x$1 in
x--pass-through)
[ $# -gt 1 ] || die "need an argument for $1"
user_switches="$user_switches "`shell-quote -- "$2"`
shift;;
# process other switches
esac
shift
done
# later
eval "shell-quote some-command $user_switches my args"
OPTIONS
--debug
Turn debugging on.
--help
Show the usage message and die.
--version
Show the version number and exit.
AVAILABILITY
The code is licensed under the GNU GPL. Check http://www.argon.org/~roderick/ or CPAN for updated versions.
AUTHOR
Roderick Schertler <roderick@argon.org>
perl v5.16.3 2010-06-11 SHELL-QUOTE(1)