我有一个巨大的文件我需要更新才能创建一个列表(列出一个csv),但我只有一列。
我想用键/值对组合创建2列。
我有例如:
Key 1 is NICE
Key 2 is good
Key 3 is Awesome
我需要:
key 1 is nice|Key 1 is NICE
key_2_is_good|key 2 is good
key_3_is_awesome|Key 3 is Awesome
所以第一个将全部用_而不是空格小写,第二个用普通字符串
我到目前为止:
:%s/^\(.*\)$/\1|\1/
哪个好,但我怎样才能将空间固定为_并且全部小写?
感谢
答案 0 :(得分:5)
宏可以比替换更直观:
qq " start recording in register q then…
0 " go to the first column then…
y$ " yank from here to end of line then…
A| " append a pipe at the end of the line then…
<C-r>=substitute(@", " ", "_", "g")<CR> " insert text of first column with spaces replaced by underscores then…
<Esc> " get out of insert mode then…
q " stop recording
之后,选择下一行并执行
:'<,'>norm @q
答案 1 :(得分:4)
在这种情况下,您可以使用替换的第二部分作为表达式进行评估,如下面:h sub-replace-special
中的帮助中所述。
如果我已正确理解您的问题,这应该有效:
%s/.*/\=substitute(tolower(submatch(0)), ' ', '_', 'g')."|".submatch(0)
submatch(0)
返回:s
命令中完整匹配的文本,tolower()
函数将其转换为小写,最后substitute()
调用将所有空格替换为_
< / p>
答案 2 :(得分:2)
首先尝试一下:
:%s/^\(.*\)$/\L&\E|&/
输出:
key 1 is nice|Key 1 is NICE
key 2 is good|Key 2 is good
key 3 is awesome|Key 3 is Awesome
了解详情