My data is of the form:
id|name|things that I don't care
So for each line I want to delete text after the second | symbol.
How do I do this in Vim with one command?
Note: There are actually extra pipes after the second |, since the | character is used as the delimiter for columns.
One solution:
:%s!^\([^|]*|\)\{2\}\zs.*!!
Explanation:
%: on every lines: subtitute!: start of pattern^: start of line\(: start of group[^|]*: any number of non-pipe characters|: followed by a pipe\): end of group\{2\}: match two counts of that group\zs: start the pattern matching here.*: any characters!: end of pattern and start of replacement!: end of replacementThis will leave lines with fewer than two pipes untouched and will also deal with lines that have more than the two pipes...
Before
id name things that I don't care no pipes
id|name things that I don't care one pipe
id|name|things that I don't care two pipes
id|name|things that I don't care extra pipe at line end|
id|name|things that I don't care | extra pipe mid-line
id|name|things that I don't| care| two extra pipes
name|things that I don't care missing first column and pipe
|name|things that I don't care missing first column
After:
id name things that I don't care no pipes
id|name things that I don't care one pipe
id|name|
id|name|
id|name|
id|name|
name|things that I don't care missing first column and pipe
|name|
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With