我试图替换文本例如

时间:2018-03-26 14:21:50

标签: vim awk sed grep

示例:

"word" -nothing 

word" - nothing 

在gvim。

我试过

:%s/^.*\"/

但我得到的是: - 没什么

我是脚本新手,所以我想知道是否可以使用gvim或awk或sed等其他方式完成。

5 个答案:

答案 0 :(得分:0)

请您试着跟随并告诉我这是否对您有帮助。

awk '{sub(/^"/,"");sub(/-/,"- ")} 1'   Input_file

解决方案第二 :使用sed

sed 's/^"//;s/-/- /'  Input_file

答案 1 :(得分:0)

如果我正确理解了您的问题,您想要用空字符串替换每行中的第一个"。所以在sed只是:

sed 's/"//'

如果没有g标记,它将仅替换每行中的第一个匹配项。

修改

它在Vim中的工作方式相同(除非你设置了'gdefault'选项),所以在Vim中你可以:

:%s/"//

答案 2 :(得分:0)

由于您还标记了grep:GNU grep为PCRE(Perl兼容的reg ex)设置了-P开关,其中\K保留\ K的剩余部分,不要将它包含在$& 中,所以:

$ echo \"word\" | grep -oP "\"\Kword\""
word"

答案 3 :(得分:0)

在vim中...检查\(字+引号+空格+连字符\)作为第一个参考,然后直接使用另一个\(\)作为第二个参考。 ..替换为第一个引用+空格+第二个引用...确保查找/替换可以在g后缀的行上多次发生。

:%s/\(\w" -\)\(\w\)/\1 \2/g

请注意,我遗漏了引用的引用...我想你可能在引用的文本中有空格 - 我认为这种形式对你来说可能更好。现在在sed中,这是关于* nix工具之间关系的非常酷的东西 - 它们都使用相似(或相同)的正则表达式模式语言。因此,可以在sed中完成与上述完全相同的模式(为了清楚起见,使用:作为分隔符)。

sed 's:\(\w" -\)\(\w\):\1 \2:g'

Awk不做背引用;所以,不是说它无法做到,而是不太方便。

答案 4 :(得分:0)

试试这个:

:%S / \ “(。*)\”/ \ 1 \“/ GC