Sponsored Content
Top Forums UNIX for Beginners Questions & Answers Delete lines between two patterns excluding the other lines containing these pattern Post 303044656 by nezabudka on Saturday 29th of February 2020 01:36:38 AM
Old 02-29-2020
I am glad if it was useful, @jiam912
The code has grown a bit, but I could not find another way to get around the buffer size limit
Code:
sed -r ':1;N;/a[^\n]*\n*$/b1;l;s/(^a.*$)\n+(^c.*$)/\1\n\2/m'

The problem was as follows.
If the string starting with 'a' was even line then the code did not work properly.
Add the 'l' command to look at the contents of the buffer (the line marked at the end with a dollar sign)
and add one line to the input file.
Code:
cat file
aaa 409
bbb 201

122 0.98
aaa 1.47
aaa 0.00
aaa 0.00
aaa 1.47

ccc 0.00
121 0.01
135 1.99

Code:
sed -r ':1;N;/\n$/b1;l;s/(^a.*$)\n+(^c.*$)/\1\n\2/m' file
aaa 409\nbbb 201$
aaa 409 
bbb 201 
\n122 0.98$

122 0.98
aaa 1.47\naaa 0.00$
aaa 1.47
aaa 0.00
aaa 0.00\naaa 1.47$
aaa 0.00
aaa 1.47
\nccc 0.00$

ccc 0.00
121 0.01\n135 1.99$
121 0.01
135 1.99

а new version
Code:
sed -r ':1;N;/a[^\n]*\n*$/b1;l;s/(^a.*$)\n+(^c.*$)/\1\n\2/m' file
aaa 409\nbbb 201$
aaa 409 
bbb 201 
\n122 0.98$

122 0.98
aaa 1.47\naaa 0.00\naaa 0.00\naaa 1.47\n\nccc 0.00$
aaa 1.47
aaa 0.00
aaa 0.00
aaa 1.47
ccc 0.00
121 0.01\n135 1.99$
121 0.01
135 1.99


Last edited by nezabudka; 02-29-2020 at 02:52 AM..
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Delete lines between two patterns without deleting the second pattern

I want to delete lines like this sed '/FROM_HERE/,/TO_HERE/d' but I would like to *not* delete the second match, i.e. the TO_HERE line. How can I achieve this? Thank you! (1 Reply)
Discussion started by: Ilja
1 Replies

2. Shell Programming and Scripting

delete lines between patterns

Hi, I've searched in this forum all day long but was not able to find enough codes to help me do a task. The only code that I can come up with is this: sed '/ /,/ /{//p;d;}' inputfile > outputfile I would like to sed/awk/grep a file for two patterns and then delete the lines between... (4 Replies)
Discussion started by: shamushamu
4 Replies

3. Shell Programming and Scripting

Delete Lines between the pattern

Hi All, Below is my requirement. Whatever coming in between ' ', needs to delete. Input File Contents: ============== This is nice 'boy' This 'is bad boy.' Got it Expected Output =========== This is nice This Got it (4 Replies)
Discussion started by: susau_79
4 Replies

4. Shell Programming and Scripting

sed pattern to delete lines containing a pattern, except the first occurance

Hello sed gurus. I am using ksh on Sun and have a file created by concatenating several other files. All files contain header rows. I just need to keep the first occurrence and remove all other header rows. header for file 1111 2222 3333 header for file 1111 2222 3333 header for file... (8 Replies)
Discussion started by: gary_w
8 Replies

5. Shell Programming and Scripting

print lines up to pattern excluding pattern

11 22 33 44 55 66 77 When pattern 55 is met, print upto it, so output is 11 22 33 44 (1 Reply)
Discussion started by: anilcliff
1 Replies

6. Shell Programming and Scripting

Delete lines and the first pattern between 2 matched patterns

Hi, i need help to delete all the lines between 2 matched patterns and the first pattern must be deleted too. sample as follows: inputfile.txt >kump_1 ........................... ........................... >start_0124 dgfhghgfh fgfdgfh fdgfdh >kump_2 ............................. (7 Replies)
Discussion started by: redse171
7 Replies

7. Shell Programming and Scripting

Sed: printing lines AFTER pattern matching EXCLUDING the line containing the pattern

'Hi I'm using the following code to extract the lines(and redirect them to a txt file) after the pattern match. But the output is inclusive of the line with pattern match. Which option is to be used to exclude the line containing the pattern? sed -n '/Conn.*User/,$p' > consumers.txt (11 Replies)
Discussion started by: essem
11 Replies

8. Shell Programming and Scripting

How to delete all lines before a particular pattern when the pattern is defined in a variable?

I have a file Line 1 a Line 22 Line 33 Line 1 b Line 22 Line 1 c Line 4 Line 5 I want to delete all lines before last occurrence of a line which contains something which is defined in a variable. Say a variable var contains 'Line 1', then I need the following in the output. ... (21 Replies)
Discussion started by: Soham
21 Replies

9. UNIX for Beginners Questions & Answers

Delete multiple lines between blank lines containing two patterns

Hi all, I'm looking for a way (sed or awk) to delete multiple lines between blank lines containing two patterns ex: user: alpha parameter_1 = 15 parameter_2 = 1 parameter_3 = 0 user: alpha parameter_1 = 15 parameter_2 = 1 parameter_3 = 0 user: alpha parameter_1 = 16... (3 Replies)
Discussion started by: ce9888
3 Replies

10. UNIX for Beginners Questions & Answers

How to print lines from a files with specific start and end patterns and pick only the last lines?

Hi, I need to print lines which are matching with start pattern "SELECT" and END PATTERN ";" and only select the last "select" statement including the ";" . I have attached sample input file and the desired input should be as: INPUT FORMAT: SELECT ABCD, DEFGH, DFGHJ, JKLMN, AXCVB,... (5 Replies)
Discussion started by: nani2019
5 Replies
QSFILTER2(1)							qsfilter2 man page						      QSFILTER2(1)

NAME
qsfilter2 - Utility to generate mod_qos request line rules out from existing access/audit log data. SYNOPSIS
qsfilter2 -i <path> [-c <path>] [-d <num>] [-h] [-b <num>] [-p|-s|-m|-o] [-l <len>] [-n] [-e] [-u 'uni'] [-k <prefix>] [-t] [-f <path>] [-v 0|1|2] DESCRIPTION
mod_qos implements a request filter which validates each request line. The module supports both, negative and positive security model. The QS_Deny* directives are used to specify request line patterns which are not allowed to access the server (negative security model / black- list). These rules are used to restrict access to certain resources which should not be available to users or to protect the server from malicious patterns. The QS_Permit* rules implement a positive security model (whitelist). These directives are used to define allowed request line patterns. Request which do not match any of thses patterns are not allowed to access the server. qsfilter2 is an audit log analyzer used to generate filter rules (perl compatible regular expressions) which may be used by mod_qos to deny access for suspect requests (QS_PermitUri rules). It parses existing audit log files in order to generate request patterns covering all allowed requests. OPTIONS
-i <path> Input file containing request URIs. The URIs for this file have to be extracted from the servers access logs. Each line of the input file contains a request URI consiting of a path and and query. Example: /aaa/index.do /aaa/edit?image=1.jpg /aaa/image/1.jpg /aaa/view?page=1 /aaa/edit?document=1 These access log data must include current request URIs but also request lines from previous rule generation steps. It must also include request lines which cover manually generated rules. -c <path> mod_qos configuration file defining QS_DenyRequestLine and QS_PermitUri directives. qsfilter2 generates rules from access log data automatically. Manually generated rules (QS_PermitUri) may be provided from this file. Note: each manual rule must be represented by a request URI in the input data (-i) in order to make sure not to be deleted by the rule optimisation algorithm. QS_Deny* rules from this file are used to filter request lines which should not be used for whitelist rule generation. Example: # manually defined whitelist rule: QS_PermitUri +view deny "^[/a-zA-Z0-9]+/view?(page=[0-9]+)?$" # filter unwanted request line patterns: QS_DenyRequestLine +printable deny ".*[x00-x19].*" -d <num> Depth (sub locations) of the path string which is defined as a literal string. Default is 1. -h Always use a string representing the handler name in the path even the url does not have a query. See also -d option. -b <num> Replaces url pattern by the regular expression when detecting a base64/hex encoded string. Detecting sensibility is defined by a numeric value. You should use values higher than 5 (default) or 0 to disable this function. -p Repesents query by pcre only (no literal strings). -s Uses one single pcre for the whole query string. -m Uses one pcre for multipe query values (recommended mode). -o Does not care the order of query parameters. -l <len> Outsizes the query length by the defined length ({0,size+len}), default is 10. -n Disables redundant rules elimination. -e Exit on error. -u 'uni' Enables additional decoding methods. Use the same settings as you have used for the QS_Decoding directive. -p Repesents query by pcre only (no literal strings). Determines the worst case performance for the generated whitelist by applying each rule for each request line (output is real time filter duration per request line in milliseconds). -k <prefix> Prefix used to generate rule identifiers (QSF by default). -t Calculates the maximal latency per request (worst case) using the generated rules. -f <path> Filters the input by the provided path (prefix) only processing matching lines. -v <level> Verbose mode. (0=silent, 1=rule source, 2=detailed). Default is 1. Don't use rules you haven't checked the request data used to gen- erate it! Level 1 is highly recommended (as long as you don't have created the log data using your own web crawler). OUTPUT
The output of qsfilter2 is written to stdout. The output contains the generated QS_PermitUri directives but also information about the source which has been used to generate these rules. It is very important to check the validity of each request line which has been used to calculate the QS_PermitUri rules. Each request line which has been used to generate a new rule is shown in the output prefixed by "ADD line <line number>:". These request lines should be stored and reused at any later rule generation (add them to the URI input file). The subse- quent line shows the generated rule. At the end of data processing a list of all generated QS_PermitUri rules is shown. These directives may be used withn the configuration file used by mod_qos. EXAMPLE
./qsfilter2 -i loc.txt -c httpd.conf -m -e ... # ADD line 1: /aaa/index.do # 003 ^(/[a-zA-Z0-9-_]+)+[/]?.?[a-zA-Z]{0,4}$ # ADD line 3: /aaa/view?page=1 # --- ^[/a-zA-Z0-9]+/view?(page=[0-9]+)?$ # ADD line 4: /aaa/edit?document=1 # 004 ^[/a-zA-Z]+/edit?((document)(=[0-9]*)*[&]?)*$ # ADD line 5: /aaa/edit?image=1.jpg # 005 ^[/a-zA-Z]+/edit?((image)(=[0-9.a-zA-Z]*)*[&]?)*$ ... QS_PermitUri +QSF001 deny "^[/a-zA-Z]+/edit?((document|image)(=[0-9.a-zA-Z]*)*[&]?)*$" QS_PermitUri +QSF002 deny "^[/a-zA-Z0-9]+/view?(page=[0-9]+)?$" QS_PermitUri +QSF003 deny "^(/[a-zA-Z0-9-_]+)+[/]?.?[a-zA-Z]{0,4}$" SEE ALSO
qsexec(1), qsgeo(1), qsgrep(1), qslog(1), qslogger(1), qspng(1), qsrotate(1), qssign(1), qstail(1) AUTHOR
Pascal Buchbinder, http://opensource.adnovum.ch/mod_qos/ mod_qos utilities 10.8 June 2012 QSFILTER2(1)
All times are GMT -4. The time now is 01:55 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy