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