Srikanth Anirudh
Srikanth Anirudh

Reputation: 29

Unix: multi and single character delimiter in cut or awk commands

This is the string I have:

my_file1.txt-myfile2.txt_my_file3.txt

I want to remove all the characters after the first "_" that follows the first ".txt".

From the above example, I want the output to be my_file1.txt-myfile2.txt. I have to search for first occurrence of ".txt" and continue parsing until I find the underscore character, and remove everything from there on.

Is it possible to do it in sed/awk/cut etc commands?

Upvotes: 2

Views: 896

Answers (2)

RavinderSingh13
RavinderSingh13

Reputation: 133458

Could you please try following, written based on your shown samples.

awk '{sub(/\.txt_.*/,".txt")} 1' Input_file

Simply substituting everything from .txt_ to till last of line with .txt and printing the line here

Upvotes: 1

Ed Morton
Ed Morton

Reputation: 203324

You can't do this job with cut but you can with sed and awk:

$ sed 's/\.txt/\n/g; s/\([^\n]*\n[^_]*\)_.*/\1/; s/\n/.txt/g' file
my_file1.txt-myfile2.txt

$ awk 'match($0,/\.txt[^_]*_/){print substr($0,1,RSTART+RLENGTH-2)}' file
my_file1.txt-myfile2.txt

Upvotes: 3

Related Questions