user6924580
user6924580

Reputation:

Replacing/removing square brackets in a string

I have the following text in a file:

Names of students
[Name:Anna]
[Name:Bob]
[Name:Carla]
[Name:Daniel]
[ThisShouldNotBeBeRemoved]
End of all names
Blablabla

I want to remove all lines of the text file where there is an occurrence of the string in the format of [Name:xxx], xxx being a name as a string of any length and consisting of any characters.

I have tried the following, but it wasn't successful:

$ sed '/\[Name:*\]/d' file > new-file

Is there any other way I could approach this?

Upvotes: 0

Views: 835

Answers (5)

Sachin Singh
Sachin Singh

Reputation: 1

OR if you don't want to create new file then try this,

sed -i '/[Name:.*]/d' file

Upvotes: 0

l'L'l
l'L'l

Reputation: 47282

You need to use .* not just * ...

sed '/\[Name:.*\]/d' file > new-file

* on it's own is meaningless in this particular circumstance. Adding . before it signifies "match any character zero or more times" — which I think is what you're wanting to do.

If you wanted to do an in-place edit to the original file without re-directing to a new one:

Linux:

sed -i '/\[Name:.*\]/d' file

macOS:

sed -i '' '/\[Name:.*\]/d' file

* note - this overwrites the original file.

Upvotes: 1

P....
P....

Reputation: 18411

sed  '/\[Name:[[:alpha:]]+\]/d' file
 Names of students
[ThisShouldNotBeBeRemoved]
End of all names
Blablabla

Upvotes: 0

schorsch312
schorsch312

Reputation: 5714

I would use grep with -v

-v, --invert-match

Invert the sense of matching, to select non-matching lines. (-v is specified by POSIX.)

grep -v "\[Name:"

Upvotes: 3

Harini
Harini

Reputation: 571

You missed out something,

sed '/\[Name:.*\]/d' file > new-file

This would remove your lines that match.

.*  This matches any character zero or more than once.

Upvotes: 0

Related Questions