Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在Vi编辑器中,如何查找和更改特定日期的日期格式?_Regex_Date_Vim_Find_Vi - Fatal编程技术网

Regex 在Vi编辑器中,如何查找和更改特定日期的日期格式?

Regex 在Vi编辑器中,如何查找和更改特定日期的日期格式?,regex,date,vim,find,vi,Regex,Date,Vim,Find,Vi,我的数据看起来像是在vi编辑器中打开的文件中的2条记录- 445544|2016-02-09|026|111|W108576|1|2015-02-13|2017-02-17|WHI|2016-02-10|SC|RN 114433|2016-02-07|046|366|WR71X253|4|2016-02-09|2017-02-17|GE|2016-02-08|SC|RN 我想将最后一个日期值的日期格式从YYYY-mm-dd更改为mm-dd-YYYY,即 '2016-02-10' to '02

我的数据看起来像是在vi编辑器中打开的文件中的2条记录-

445544|2016-02-09|026|111|W108576|1|2015-02-13|2017-02-17|WHI|2016-02-10|SC|RN

114433|2016-02-07|046|366|WR71X253|4|2016-02-09|2017-02-17|GE|2016-02-08|SC|RN
我想将最后一个日期值的日期格式从YYYY-mm-dd更改为mm-dd-YYYY,即

'2016-02-10' to '02-10-2016' & 
'2016-02-08' to '02-08-2016'
以下是我尝试过的

^.*\(\<[0-9]{4}\>\)-\(\<[0-9]{2}\>\)-\(\<[0-9\]{2}\>\)|\w\+|\w\+\n$
上面写着-E486:找不到模式:

我知道一旦我找到了我能做的模式-

:STARTLINE,ENDLINEs/<PATTERN to find>/<PATTERN to replace>/g
请帮忙

s/\v^([^|]+\|){9}\zs(\d{4})-(\d{2}-\d{2})/\3-\2/
\v非常神奇,避免了太多\s ^[^ |]+\|{9}\z从行首开始,9列以|分隔。通过使用\zs,它后面的正则表达式将作为替换匹配的开始 \d{4}-\d{2}-\d{2}捕获YYYY和MM-DD作为两组 \3-\2根据需要重新安排 没有\zs


在正常模式下按此键可以更改单行:

$2T-Xdbf|i-<c-r>"<esc>
然后按@q

注意,由于我使用了嵌套宏,请在录制宏之前先做一个QQ,以便清除q中的旧内容

正常命令 您也可以将这些普通命令包装为:norm:

注意

在^R上方按ctrl-v ctrl-R 如果按ctrl-v ESC键,则会显示“^” \.\| \贪婪地将所有内容匹配到最后一个,这也会让人感到满意 \\d\{4\}-\\d\{2\}-\\d\{2\}\匹配YYYY-MM-DD
最短的正则表达式解决方案是使用\zs、\v或非常神奇的 在默认情况下启用它,并利用贪婪。如果 匹配a.*,一切都匹配。然后引擎返回 一步一步地尝试匹配剩余的匹配项。这样可以匹配日期 将是队列中的最后一个日期,aways

s/\v.*\zs(\d{4})-(\d\d-\d\d)/\2-\1

我喜欢这个解决方案,但是既然我们是Vim Golf'ing,^R比p有什么优势吗?我觉得它仍然可以工作,并且可以节省一次击键。*一个完美的解决方案Kent。你能简单地回答一下这些快捷方式的作用吗*这个神秘的语言有一个共同的抽象术语吗?*还建议改进->c-R和esc很容易与正确的“Ctrl”键和“Escape”键混淆。你应该感谢上帝,他让我一直读到EOF;@nitinr708你可以用示例文本打开vim,按我答案中的键,看看会发生什么,我不会解释所有这些键的作用,你可以自己找到,例如:hx,:hf等。关于你是否使用vim的问题给我一次机会,你不会感到困惑的。
qq$2T-Xdbf|i-<c-r>"<esc>+@qq
:%norm! $2T-Xdbf|i-^R"^[
%s/\(.*\|\)\(\d\{4\}\)-\(\d\{2\}\)-\(\d\{2\}\)/\1\3-\4-\2/g
s/\v.*\zs(\d{4})-(\d\d-\d\d)/\2-\1