Selecting text on multiple lines, then removing a beginning and end patterns


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Selecting text on multiple lines, then removing a beginning and end patterns
# 1  
Old 02-08-2020
Selecting text on multiple lines, then removing a beginning and end patterns

I have a file similar to the below. I am selecting only the paragraphs with @inlineifset.

I am using the following command

Code:
sed '/@inlineifset/,/^ *$/!d;
  s/@inlineifset{mrg, @btpar{@//' $flnm >> $ofln


This produces

Code:
@section Correlations between
seismograms,,,,}}

@inlineifset{mrg, @ptpar{Most common use of ambient noise is subsurface
tomography [extract traveltimes of Rayleigh Wavetrains].,,,,}}

@inlineifset{mrg, @ctpar{(1) cross correlation of waveforms;, (2)
computation of group and phase velocities at different wave frequencies
(periods),,,}}

@inlineifset{mrg, @ptpar{?,,,,}}

However I want to end up with the following. As seen the ....}} is removed and seismograms but on previous line

so the texinfo command defining a section is on one line.

Code:
@section Correlations between seismograms

@inlineifset{mrg, @ptpar{Most common use of ambient noise is subsurface
tomography [extract traveltimes of Rayleigh Wavetrains].,,,,}}

@inlineifset{mrg, @ctpar{(1) cross correlation of waveforms;, (2)
computation of group and phase velocities at different wave frequencies
(periods),,,}}

@inlineifset{mrg, @ptpar{?,,,,}}

The input file is the following

Code:
cat file

@inlineifset{mrg, @btpar{@@section Correlations between
Seismograms,,,,}}

@inlineifset{mrg, @ptpar{Most common use of ambient noise is subsurface
tomography [extract traveltimes of Rayleigh Wavetrains].,,,,}}

@inlineifset{mrg, @ctpar{(1) cross correlation of waveforms;, (2)
computation of group and phase velocities at different wave frequencies
(periods),,,}}

The most common approach in the ambient noise technique is to extract
the traveltimes of background Rayleigh Wavetrains using the cross
correlation of waveforms, followed by the computation of group and phase
velocities at different wave frequencies (periods)
@ref{bibl--Ermert--et--Villasenor--et--Fichtner--2016,, Ermert@comma{}
Villase@~nor & Fichtner (2016)}.  The geophysical basis is that when
diffuse wavefields are produced by diffuse sources or by multiple
scatterers, although the station instruments detect random signals, when
the same seismic wavetrain passes through two distinct stations, the
recorded seismograms are weakly correlated.  This emerged from one of
the most well known conjectures in seismology @minus @ @dfn{The
Claerbout Cross Correlation Conjecture}.  It was first stated by
American Geophysicist Jon F.@: Claerbout in 1968, after showing that the
reflectivity response of a one dimensional (1D) layered structure from a
surface source and a surface receiver is one side of the autocorrelation
of the seismogram recorded at the same surface receiver but transmitted
from a source at depth.

@inlineifset{mrg, @ptpar{?,,,,}}

It was specialist discipline of @dfn{Helioseismology}, developed in
recent decades that validated the long standing geophysical cross
correlation approach that generalised Claerbout's Conjecture to Three
Dimensions (3-D).  Essentially, helioseismology studies the surface
oscillations of the sun in a timescale of minutes and hours as seen from
solar spectra (spectral lines).  The fundamental physics for working
with the surface undulations of the sun focuses on the simulation
(modelling) of acoustic wave propagation stochastically excited and
damped by the convection of solar plasma (e.g., using P-Modes).


Last edited by Danette; 02-08-2020 at 05:39 PM..
# 2  
Old 02-08-2020
Try
Code:
awk '
/inlineifset/   {$1 = $1; 
                 if (sub (/@inlineifset{mrg, @btpar{@/, "")) sub (/,,,,}}/, "")
                 print
                }
 ' RS= ORS="\n\n" FS="\n" file
@section Correlations between Seismograms

@inlineifset{mrg, @ptpar{Most common use of ambient noise is subsurface tomography [extract traveltimes of Rayleigh Wavetrains].,,,,}}

@inlineifset{mrg, @ctpar{(1) cross correlation of waveforms;, (2) computation of group and phase velocities at different wave frequencies (periods),,,}}

@inlineifset{mrg, @ptpar{?,,,,}}

# 3  
Old 02-08-2020
I want to avoid changing the other lines with @ptpar and @ctpar.

Last edited by Danette; 02-08-2020 at 08:22 PM..
# 4  
Old 02-09-2020
Try this adaptation of RudiC's suggestion:

Code:
awk '
  /@inlineifset/ {
    if(/@btpar/) {
      $1 = $1
      gsub(/@inlineifset{mrg, @btpar{@|,,,,}}/, "")
    }
    print
  }
' RS= ORS="\n\n" FS="\n" file

This User Gave Thanks to Scrutinizer For This Post:
# 5  
Old 02-09-2020
You can boost your sed attempt
Code:
sed '
  /@inlineifset/,/^ *$/!d
  /@inlineifset{mrg, @btpar{@/{
# Delete the previous search pattern
    s///
    :Loop
# Delete the end pattern; on success go to the end (next cycle)
    s/,,*}}//; t
# Emergency exit
    $b
# Append the next input line; go to :Loop
    N; bLoop
  }
' $flnm >> $ofln

Edit: this does not work!
My mistake: the success status of the s/// is not changed by the following unsuccessful s/,,*}}// so the t command always branches to the end (next cycle).
Here is a fix:
Code:
sed '
  /@inlineifset/,/^ *$/!d
  /@inlineifset{mrg, @btpar{@/{
# Delete the previous search pattern
    s///
    :Loop
    /,,*}}/{
# Delete the previous search pattern; go to the end (next cycle)
      s///; b
    }
# Emergency exit
    $b
# Append the next input line; go to :Loop
    N; bLoop
  }
' $flnm >> $ofln


Last edited by MadeInGermany; 02-10-2020 at 07:54 AM.. Reason: Mistake
# 6  
Old 02-09-2020
That should be it.
I also used the following to take care of long lines



Code:
fold -s temp.txt > temp.fld
fmt -w 72 temp.fld >> $ofln

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. 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

2. UNIX for Beginners Questions & Answers

Removing characters from beginning of multiple files

Hi, I have been searching how to do this but I can't seem to find how to do it. Hopefully someone can help. I have multiplr files, 100's example 12345-zxys.213423.zyz.txt. I want to be able to take all these files and remove the first '12345-' from each of the files. '12345-' these characters... (5 Replies)
Discussion started by: israr75
5 Replies

3. Shell Programming and Scripting

Replacing entire fields with specific text at end or beginning of field

Greetings. I've got a csv file with data along these lines: Spumoni's Pizza Place, Placemats n Things, Just Lamps Counterfeit Dollars by Vinnie, Just Shades, Dollar StoreI want to replace the entire comma-delimited field if it matches something ending in "Place" or beginning with "Dollar",... (2 Replies)
Discussion started by: palmfrond
2 Replies

4. Shell Programming and Scripting

Add words in beginning , end after removing a word in a file

My file has the entries like below... /dev/sds /dev/sdak /dev/sdbc /dev/sdbu I want to make the file like below echo 1 > /sys/block/sds/device/rescan echo 1 > /sys/block/sdak/device/rescan echo 1 > /sys/block/sdbc/device/rescan echo 1 > /sys/block/sdbu/device/rescan (2 Replies)
Discussion started by: saravanapandi
2 Replies

5. Shell Programming and Scripting

Removing hyphen from beginning and end of a word only.

It is very simple to remove a hyphen from a word anywhere in that word using a simple sed command (sed -i 's/-//g' filename), but I am not able to figure out how to do this: For example, apple -orange tree pipe- banana-shake dupe- What my output should look like: apple orange tree... (1 Reply)
Discussion started by: shoaibjameel123
1 Replies

6. Shell Programming and Scripting

trying to add text to beginning and end of each line

Well here goes: I tried to write a batch file that adds a specific fixed text to each line of an already existing text file. for the adding text infront of each line I tried this: for /F "delims=" %%j in (list.txt) do echo.STARTTEXT\%%j >> list.txt for adding text after each line I... (0 Replies)
Discussion started by: pasc
0 Replies

7. UNIX for Dummies Questions & Answers

Removing trailing lines at the end of a text file

How do you remove trailing empty lines at the end of a text file? Thanks! (3 Replies)
Discussion started by: evelibertine
3 Replies

8. Shell Programming and Scripting

Removing file lines that each match to a different patterns

I have a very large file (10,000,000 lines), that contains a sample id and a property of that sample. I have another file that contains around 1,000,000 lines with sample ids that I want to remove from the original file (create a new file without these lines). I know how to do this in Perl, but it... (9 Replies)
Discussion started by: Jo_puzzled
9 Replies

9. UNIX for Dummies Questions & Answers

removing multiple lines of text in a file

Hi, I'm trying to remove multiple lines of text based off a series of different words and output it to a new file The document contains a ton of data but i want to delete any line that has the following mx1.rr.biz.com or ns2.ri.biz.com i tried using grep -v filename "mx1.rr.biz.com" >... (3 Replies)
Discussion started by: spartan22
3 Replies

10. Shell Programming and Scripting

Removing end of line to merge multiple lines

I'm sure this will be an easy question for you experts out there, but I have been searching the forum and working on this for a couple hours now and can't get it right. I have a very messy data file that I am trying to tidy up - one of the issues is some records are split into multiple lines: ... (4 Replies)
Discussion started by: tink
4 Replies
Login or Register to Ask a Question